0

私は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

各連絡先のすべての cID、名前、電話番号 (pID が 1 の場合)、および電子メールをすべて 1 つのテーブルに取得する選択クエリを作成する必要があります。したがって、出力はたとえば次のようになります。

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;

これでほぼ完了ですが、連絡先の名前に電話番号も電子メールも含まれていない場合は除外されます。
データベースに電子メールまたは電話番号があるかどうかに関係なく、すべての連絡先を表示する必要があります。

どうすればこれを達成できますか?

4

1 に答える 1

3
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 = 1ときに、 ON 句にの基準を入れる必要があります。さらに、電話や電子メールがない場合に対処するために、Left Join を使用する必要があります。phonecontact

于 2011-02-13T23:56:34.337 に答える