Benötigen Sie Hilfe bei einer MySQL-Auswahlabfrage
-
13-11-2019 - |
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?
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.