Stecke fest bei nem Select :)
-
Hallo zusammen.
Ich versuche gerade meine Programmroutinen von Dateiverarbeitung auf Datenbankzugriffe umzustellen und mache dabei die ersten Schritte mit SQLite
Mein Problem liegt aktuell an folgender Aufgabenstellung:
Eine Datenbank beinhaltet aktuell etwa 10.000 Sätze.
Ergebnis eines - wie auch immer gearteten - Selects soll sein, dass die Attribute des Satzes und zusätzlich einige Attribute eines in Relation stehenden Satzes als Spalten auftauchen. Allerdings hat nicht jeder Satz in der Datenbank einen "Verwandten".
Hintergrund des Ganzen ist, dass Zugänge und Abgänge in der Datenbank gespeichert sind und mit einem entsprechenden Kennzeichen unterschieden werden.
Zuerst habe ich mir mal Views angelegt, die nach Kennzeichen aufteilen - einen für Zugänge, einen für Abgänge.
Nun möchte ich sozusagen alle Sätze angezeigt bekommen und zusätzlich 2 Attribute des entsprechend zugehörigen Satzes, sollte ein Abgang zum Zugang existieren.
Aktuell bekomme ich mit meiner Abfrage nur alle Zugänge mit passenden Abgängen. Die Zugänge ohne Abgang werden mir wegen des Joins vorenthalten.SELECT zu.*, ab.datum, ab.sw FROM dbzu AS zu JOIN dbab as ab ON ab.xy = zu.xy AND ab.gh = zu.gh AND ab.datum > zu.datum ORDER BY zu.datum, zu.xy;
xy und gh machen das Basis-Objekt eindeutig, dbzu und dbab sind views mit den entsprechenden Sätzen und die Abgänge müssen logischerweise jünger sein als die Zugänge (selbes Datum ist nicht möglich).
Wie gesagt erhalte ich in diesem Fall durch den Join nur die Sätze aus dbzu als Ergebnis, die auch einen Partnersatz in dbab haben. Kann ich zusätzlich auch die Sätze ohne Entsprechung in dbab bekommen?Danke für Eure Hilfe
-
Klar. Das ist ein Fall für ein left outer join:
SELECT zu.*, ab.datum, ab.sw FROM dbzu AS zu LEFT OUTER JOIN dbab as ab ON ab.xy = zu.xy AND ab.gh = zu.gh AND ab.datum > zu.datum ORDER BY zu.datum, zu.xy;
-
jup, stimmt schon... Danke
Hatte es zuerst mit einem "outer join" versucht, worauf mir sqlite3 mitteilte, dass es keine outer joins könne. left outer join habe ich dann gar nicht erst ausprobiert - kann sqlite3 aber
merci!