Drei-Wege-join in sql
Ich habe drei Tabellen mit dem Titel "Gast", "Guest_Address" und "Acutal_Address".
Guest_Address ist eine Verknüpfung von Tabelle zwischen Gast und acutal_address.
Dies ist, was ich habe, so weit.
SELECT GUEST_ADDRESS.ADDRESS_CODE,(GUEST_FNAME+' '+GUEST_LNAME) AS GUEST_NAMES
FROM GUEST JOIN GUEST_ADDRESS
ON GUEST.ADDRESS_NUM = GUEST_ADDRESS.ADDRESS_NUM;
Diese nur Verknüpfungen der Gast und Guest_address Tisch, aber ich müssen sich Gast und Acutal_Address.
Hier ist die ERD.
InformationsquelleAutor Naman | 2013-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun möchten, ist eine zusätzliche Verknüpfung der actual_address Tabelle etwa so :
Dagegen, wenn ich Frage, warum Sie, dass die Verknüpfung der Tabelle? Können die Gäste mehrere Adressen? Wenn das der Fall ist würde ich ändern, die Verknüpfung von
GUEST_ADDRESS
zuGUEST
basierend aufGUEST_ID
eher alsADDRESS_NUM
als mitADDRESS_NUM
macht die Beziehung zwischen den beiden Tabellen eine eins-zu-eins-Beziehung eher als eins-zu-vieleIst auch erwähnenswert, dass die obige Abfrage wird nicht wieder ein Rekord für den Gast, wenn es keine Adresse gibt, die in der
ACTUAL_ADDRESS
Tabelle oder einen link in derGUEST_ADDRESS
Tabelle aufgrund derJOIN
. Wenn Sie möchten, es zurückzugeben Gast details unabhängig von der Adresse, Sie können ganz einfach ändern Sie dieJOIN
zuLEFT JOIN
InformationsquelleAutor JanR
Gibt es eine viele-zu-viele-Beziehung zwischen
Guest
undActualAddress
über die auxilary TabelleGuestAddress
. So beitreten, um dann alle zusammen in einen Satz tun:Dann verwenden Sie die
where
- Klausel zum filtern der Satz nach unten zu einer kleineren (sub-set), wenn es sein mussInformationsquelleAutor SyntaxGoonoo