2009-04-10 16 views
1

Eine "einfache SQL-Frage" :) Ich habe zwei Tabellen und eine dritte, die als "Semi-Junction-Tabelle" fungiert, was bedeutet, dass manchmal nur einer der beiden Fremdschlüssel ist gibt es eine Möglichkeit, sich ihnen anzuschließen?Verbinden über Junction-Tabelle mit Nullable-Feld

Zum Beispiel angegeben die folgenden Daten:

Tabelle D-IDs: 1,2,3,4,5
Tabelle C-IDs: 1,2,3
Tabelle Junction (D.id, C .id): (1,1) (2, NULL) (3, NULL) (4,2) (5,3)

Gibt es eine Möglichkeit, Folgendes abzurufen?
([D Felder von Zeilen-ID 1], [C Felder von Zeilen-ID 1])
([D Felder von Zeilen-ID 2], [NULL C Feldern])
([D Felder von Zeilen-ID 3] , [Null-C-Felder])
([D-Felder der Zeilen-ID 4], [C-Felder der Zeilen-ID 2])
([D-Felder der Zeilen-ID 5], [C-Felder der Zeilen-ID 3])

Wenn es relevant ist, verwende ich PostgreSQL.
Danke für Ihre Zeit!

+0

kühlen Logo. Ich mache mir Sorgen um das Tischdesign; Genauer: Was bedeutet es, dass ein Eintrag in der Junction-Tabelle mit einer Null für einen der Werte angezeigt wird? –

+0

Nun, die "Semi Junction Tabelle" ist eigentlich das Ergebnis einer Outerjoin-basierten Auswahl :) Die tatsächlichen Tabellen sind D -> "Kunden" und C -> "Gesendete Dokumente" .. Ich muss einen Bericht erstellen, der jeden Kunden zeigt und schließlich sein LETZTES gesendetes Dokument (nicht jeder Kunde hat ein Dokument) .. Ein bisschen kompliziert :) – Joril

+0

@Joril: okay, fair genug. Sie erhalten oft bessere Antworten, wenn Sie die richtige Frage stellen. –

Antwort

3
SELECT d.*, c.* 
FROM d 
JOIN junction j 
ON  j.d_id = d.id 
LEFT JOIN 
     с 
ON  c.id = j.c_id 
+0

Vielen Dank an alle :) – Joril

Verwandte Themen