SQL Oracle: Abfrageeingrenzung mit ausgeben

Hallo Zusammen,

Ich hab eine Abfrage, mit einer where Bedinginge auf ein Tabellenfeld. Jetzt will ich auch eine Zeile ausgegeben haben in der man meine Eingrenzung sieht und falls kein Eintrag dazu vorkommt trotzdem eine zeile mit null angezeigt beomme.

Bsp.
Select * From auto
where kennzeichen in (‚xx-121‘, ‚xx-564‘, ‚xx-999‘);

wenn das Kennzeichen xx-121 nicht in der Tabelle Auto vorkommt, bekomme ich keine Zeile angezeigt. Ich möchte jedoch eine Zeile angezeigt bekommen wo das Kennzeichen steht und dann für die Tabellenspalten null.

Abfrageergebnis(momentan):
Kennzeichen Typ PS
xx-564 BWM 120
xx-999 Audi 160

gewünschtes Abfrageergebnis:
Kennzeichen Typ PS
xx-121 null null
xx-564 BWM 120
xx-999 Audi 160

Ich hoffe mir kann einer helfen.

Vielen Danke

Hallo,

so direkt mit einem simplen SELECT geht das nicht.
IN(…) ist ja nix weiter als eine Vergleichsfunktion für Wert und Vergleichsliste, die true oder false zurückgibt; die kann keine zusätzlichen Zeilen ins Resultset einfügen.
Solche null-Ausgaben für nicht vorhandene Werte kannst du nur mit LEFT JOIN erzwingen. Die linke Tabelle muss dabei die vollständige Liste aller Suchwerte enthalten, die rechte ist die evtl. unvollständige mit den kompletten Datensätzen (in deinem Bsp. auto).
Wenn die Suchliste nicht als Tabelle exisstiert, kannst du dir mit einer temporären Tabelle behelfen:
CREATE TEMPORARY TABLE IF NOT EXITS myTempTable (search_key VARCHAR(50));
DELETE FROM myTempTable;

INSERT INTO myTempTable VALUES
(‚xx-111‘) ,
(‚xx-222‘) ,
(‚xx-333‘) ;
– oder: INSERT INTO myTempTable SELECT

SELECT myTempTable.search_key , myRealTable.* FROM
( myTempTable LEFT JOIN auto AS myRealTable
ON myTempTable.search_key = myRealTable.kennzeichen
) ;

Das funktioniert mit allen möglichen Tabellen und Werten, einfach auto und kennzeichen ersetzen sowie die Werteliste von VALUES.

Gruß
Thomas

vielen Dank für die Antwort