質問

私は3つの表を持っています

[contact]
------------------
cID (PRIMARY KEY, INT) || name || lastupdate (TIMESTAMP)

[phone]
----------------------
cID (FOREIGN KEY, linked to contact.cID) || phonenumber || pID (phone number ID, since each contact can have many numbers)

[email]
------------------------
cID (FOREIGN KEY) || email
.

PIDが1と電子メールのすべてのテーブルの場合、各連絡先、名前、電話番号のすべてのCIDを取得するSELECTクエリを作成する必要があります。 そのため、出力は次のようになります。

cID   |   name             |   phone1  |  email
----------------------------------------------
45    |  John Smith         |  1234567  |  john.s@test.com
46    |  Darth Vader        |  9999999  |  vader@deathstar.org
47    |  Yoda               |  1236547  |  
-----------------------------------------------------------------------------
.

私はこのようなことをやってみました

SELECT contact.cID, name, phone, email FROM contact, phone, email 
WHERE contact.cID = phone.cID AND contact.cID = email.cID AND phone.pID = 1;
.

これはほとんどそれをしますが、連絡先が電話番号または自分の名前で電子メールのいずれかを持っていない場合は、除外されます。
私は天気に関係なく、データベースに電話番号を持っているか、またはデータベースに電話番号を表示する必要があります。

これをどのように達成することができますか?

役に立ちましたか?

解決

Select c.cID, C.name, P.phone As phone1, E.email
From contact As C
    Left Join phone As P
        On P.cID = C.cID
            And P.pID = 1
    Left Join email As E
        On E.cID = C.cID
.

要するに、pID = 1phoneを結合するときに、contactの基準をON文節に入れる必要があります。AddItonでは、電話や電子メールがない場合を処理するために左の結合を使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top