Entwickler-Ecke

Datenbanken - Left Join mit Auschluss der null-Werte


Nico80 - Mi 30.05.07 14:29
Titel: Left Join mit Auschluss der null-Werte
Hallo,
ich habe ein Probelm mit einem Left-Join über 2 Tabellen...


SQL-Anweisung
1:
2:
3:
4:
SELECT A.*, B.*
FROM TabelleA A
       Left outer join TabelleB B on (A.id=B.id)
WHERE B.id is null


Ich möchte nun in der Ergebnismenge die Null-Werte von der linken Tabllen (-->left join) filtern.
Aber ich habe das Gefühl das die WHERE-Bedingung schon im JOIN berücksichtigt wird.

Bitte um Hilfe und Danke für Antworten!!!!


Ralf Jansen - Mi 30.05.07 20:53

ähm ... beschreib nochmal was du willst kann dir nicht wirklich folgen.
Z.B. ist die 'linke' Tabelle in deinem Select für mich Tabelle A nach deiner sonstigen Beschreibung scheinst du aber eher Tabelle B zu meinen.

Wenn ich nur dein SQL betrachte vermute ich du möchtest alle Sätze aus Tabelle A bekommen die nicht in Tabelle B zu finden sind. Das macht man dann eigentlich über einen Subselect mit EXISTS.


SQL-Anweisung
1:
2:
3:
4:
5:
SELECT A.*
  FROM TabelleA A      
 WHERE NOT EXISTS (SELECT * 
                     FROM Tabelle B 
                    WHERE A.ID = B.ID)


Oder lieg ich daneben?


mkinzler - Mi 30.05.07 20:57

Was meinst du mit Null-Werte filtern?


Nico80 - Do 31.05.07 08:48

Ich möchte eine "not in"-Bedingung durch einen Left-Join ersetzen (wg Performance).

Die ursprüngliche SQL-Anweisung lautete:


SQL-Anweisung
1:
2:
3:
SELECT A.* 
FROM TABELLEA A 
WHERE (A.XYZ not in (SELECT B.XYZ FROM TABELLEB B)


Meine SQL Anweisung ist noch ein wenig komplizierter. Tabelle A ist ein Join über 2 Tabellen und Tabelle B ein Join über 3 Tabellen.
Habe ich jetzt nur als Beispiel etwas vereinfacht.


ZeitGeist87 - Do 31.05.07 10:34

Lös das Ganze doch über eine View...


Nico80 - Do 31.05.07 11:29

user profile iconZeitGeist87 hat folgendes geschrieben:
Lös das Ganze doch über eine View...


oder durch ne Stored Procedure.

Der SQl-Abfrage übergebe ich zusätzlich noch einige Parameter.

Dachte nur, das es vielleicht noch eine andere Lösung gäbe.

In anderen SQL-Dialekten können Joins auch Aliasnamen bekommen. Dann könnte ich direkt auf die ERgebnismenge zugreifen