Autor Beitrag
Nico80
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WIN XP
DELPHI 2006
BeitragVerfasst: Mi 30.05.07 14:29 
Hallo,
ich habe ein Probelm mit einem Left-Join über 2 Tabellen...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 30.05.07 20:57 
Was meinst du mit Null-Werte filtern?

_________________
Markus Kinzler.
Nico80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WIN XP
DELPHI 2006
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 31.05.07 10:34 
Lös das Ganze doch über eine View...

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Nico80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WIN XP
DELPHI 2006
BeitragVerfasst: 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