Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Join um nicht zugeordnete Elemente zu finden (https://www.delphipraxis.net/45292-sql-join-um-nicht-zugeordnete-elemente-zu-finden.html)

VizeTE 3. Mai 2005 17:51

Datenbank: Interbase • Version: 4.5 • Zugriff über: BDE

SQL-Join um nicht zugeordnete Elemente zu finden
 
Hi,

ich habe 2 Tabellen und benötige eine Abfrage, die mir alle Datensätze in Tabelle a ausgibt die nicht in Tabelle b sind und die mir alle Datensätze aus Tabelle b ausgibt die nicht in Tabelle a sind. (über Primärschlüssel)

Folgender Join zeigt mir alle Datensätze aus beiden Tabellen. Datensätze die nicht zugeordnet sind erkennt man daran, daß eines der beiden Felder leer bleibt.
SQL-Code:
SELECT a.Id AS A, b.Id AS B
FROM TabelleA a
FULL OUTER JOIN TabelleB b ON b.Id = a.Id
Ich möchte als Ergebnismenge gern die Datensätze erhalten, bei denen ein Feld leer ist. Daher habe ich folgende Anweisung probiert
SQL-Code:
SELECT a.Id AS A, b.Id AS B
FROM TabelleA a
FULL OUTER JOIN TabelleB b ON b.Id = a.Id
WHERE a.Id IS NULL OR b.Id IS NULL
Leider gibt diese Anweisung nicht das gewünschte Ergebnis zurück. Hier bekomme ich alle Datensätze aus a und die entsprechenden Felder aus b sind leer und daran angehangen alle Datenstätze aus b und die entsprechenden Felder aus a sind leer.

Ich hoffe ihr versteht mein Problem.

thx - VizeTE

shmia 3. Mai 2005 18:05

Re: SQL-Join um nicht zugeordnete Elemente zu finden
 
SQL-Code:
SELECT * FROM TabelleA
WHERE NOT EXISTS(SELECT TabelleB.Id FROM TabelleB WHERE TabelleB.Id=TabelleA.Id)

Bernhard Geyer 3. Mai 2005 18:50

Re: SQL-Join um nicht zugeordnete Elemente zu finden
 
Evtl. so (ohne Test):
SQL-Code:
SELECT a.id as missing from a left outer join b on a.id = b.id where b.id is null
UNION
SELECT b.id as missing from b left outer join a on b.id = a.id where a.id is null

VizeTE 9. Mai 2005 08:57

Re: SQL-Join um nicht zugeordnete Elemente zu finden
 
Zitat:

Zitat von shmia
SQL-Code:
SELECT * FROM TabelleA
WHERE NOT EXISTS(SELECT TabelleB.Id FROM TabelleB WHERE TabelleB.Id=TabelleA.Id)

Wenn ich das richtig verstehe (und ein Test der Abfrage bestätigt das) dann bekomme ich hier ja nur die DS die in der ersten, jedoch nicht in der zweiten Tabelle vorhanden sind. Das macht ja meine erste Abfrage auch schon. Ich möchte jedoch noch zusätzlich die DS, die in der zweiten Tabelle, jedoch nicht in der Ersten vorkommen.

Zitat:

Zitat von Bernhard Geyer
Evtl. so (ohne Test):
SQL-Code:
SELECT a.id as missing from a left outer join b on a.id = b.id where b.id is null
UNION
SELECT b.id as missing from b left outer join a on b.id = a.id where a.id is null

ja klar, so gehts. Da hätte ich ja auch selber d'rauf kommen können. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz