Frage

Ich habe 3 Tische

[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

Ich muss eine Auswahlabfrage stellen, die die gesamte cID jedes Kontakts, seinen Namen, seine Telefonnummer, wenn die pID 1 ist, und seine E-Mail-Adresse in einer Tabelle abruft.Die Ausgabe würde also zum Beispiel so aussehen.

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

Ich habe versucht, es so zu machen

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

Das macht es fast, aber wenn ein Kontakt weder eine Telefonnummer noch eine E-Mail-Adresse mit seinem Namen hat, wird er ausgelassen.
Ich muss alle Kontakte anzeigen, unabhängig davon, ob sie eine E-Mail-Adresse oder eine Telefonnummer in der Datenbank haben.

Wie kann ich das erreichen?

War es hilfreich?

Lösung

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

Kurz gesagt, Sie müssen die Kriterien für die pID = 1 in der ON-Klausel beim Beitritt phone zu contact.Außerdem müssen Sie linke Verknüpfungen verwenden, um den Fall zu behandeln, in dem sie kein Telefon oder keine E-Mail haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top