SQL: Selbstverknüpfung von Tabellen

Elwood

Naiver Mutmaßlicher
Moin,
irgendwie hab ich nen Knoten im Kopf. Ich versuche mittels Selbstverknüpfung aus 2 Tabellen je eine Ausgabezeile (siehe Auto in diesem Beispiel) zu generieren. Das funktioniert soweit gut, nur dann nicht, wenn in der selbstverknüpften Tabelle eine Datenreihe in einem der JOINs nicht existiert.

Da die Daten in der 2. Tabelle optional sind, kann ich nicht mit der Existenz von F2.Wert rechnen!

Wie kann man in diesem Fall die erste WHERE Klausel anpassen, dass zumindest der F2.Wert und der Rest der 1. Tabelle ausgegeben werden?

Code:
Tabelle Auto

Nr    Typ
1    Audi
2    BMW
3    VW


Tabelle Features

Auto    Key        Wert
1        1        5                //        Key 1: Anzahl der Türen = 5 beim Audi
1        2        4                //        Key 2: Anzahl der Räder = 4 beim Audi
                                  //         Key 1: fehlt beim BMW
2        2        4                //        Key 2: Anzahl der Räder = 4 beim BMW
3        1        7                //        Key 1: Anzahl der Türen = 7 beim VW
3        2        4                //        Key 2: Anazhl der Räder = 4 beim VW


SELECT Auto.Typ, F1.Wert AS Tueren, F2.Wert AS Raeder
FROM Auto INNER JOIN
    Features F1 ON Auto.Typ = F1.Auto INNER JOIN
    Features F2 ON Auto.Typ = F2.Auto
WHERE F1.Key=1 AND F2.Key=2



Dies ist nur ein Beispiel, die richtige Abfrage ist ein wenig zu Prall, um mein Problem hier zu verdeutlichen (hoffentlich hab ich kein Mistbock in den Beispiel gehackt ;))

Ich habe schon mit ISNULL, HAVING etc rumgespielt, aber keinen Erfolg gehabt.
Vielleicht gibt es hier nen SQL Crack, der da fitter ist als ich :)
 
Ich würde noch eine Tabelle Feature_Keys (oder so) machen und dann den JOIN ausgehend von der Tabelle Features.

Feature_Keys(Nr, Eigenschaft)
1 Tueren
2 Raeder

SELECT A.Typ, FK.Eigenschaft, F.Wert
FROM Features F
LEFT JOIN Auto A ON (F.Auto=Auto.Nr)
LEFT JOIN Feature_Keys FK ON (F.Key=FK.Nr)

Rob
 
Die Feature_Keys Tabelle macht aber nur wirklich Sinn für Many-To-Many (n:n), als wenn du One-To-Many/Many-To-one (1:n/n:1) hast, dann reicht der FK an der richtigen Stelle.

Zumindest würde ich die zusätzliche Tabelle dann einsparen. Kommt aber auch auf die Anwendung an. Wenn man die Tabelle viel nutzen kann, zum Beispiel weil man Counts drauf macht bzw. generell Queries über die tatsächlichen Relationen macht ist das jedenfalls zu empfehlen.
 
Zurück
Oben