Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Befehl vergleichen zweier Tabellen (https://www.delphipraxis.net/72373-sql-befehl-vergleichen-zweier-tabellen.html)

PeterRettig 29. Jun 2006 10:01

Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos

SQL-Befehl vergleichen zweier Tabellen
 
Hallo,

ich suche nach einer geschickten SQL-Abfrage die folgendes bewerkstelligt:

Ausgangspunkt: Ich habe zwei Tabellen nennen wir sie TabA und TabB.
In beiden Tabellen gibt es die Spalte Nummer vom Typ Integer.
Nun möchte ich alle Sätze der Tabelle TabA angezeigt bekommen die
NICHT in der Tabelle TabB enthalten sind.

Beisp:
TabA enthält: 1, 2, 3, 4, 5, 6, 7, 8, 9
TabB enthält: 1, 2, 4, 6, 8, 9

also müsste die gesuchte SQL-Abfrage
3, 5, 7
ausgeben.

Hat jemand eine Idee oder bekommt man das mit einer SQL-Abfrage nicht hin?

Grüße, Peter.

marabu 29. Jun 2006 10:08

Re: SQL-Befehl vergleichen zweier Tabellen
 
Hallo Peter,

die Mengendifferenz kannst du so bilden:

SQL-Code:
SELECT DISTINCT Nummer FROM TabA WHERE Nummer NOT IN (SELECT Nummer FROM TabB)
Grüße vom marabu

oki 29. Jun 2006 10:11

Re: SQL-Befehl vergleichen zweier Tabellen
 
hi,

ich glaube mit "IN" müßte da was laufen. Ich arbeite nicht so oft mit SQL, somit Nachsicht im Voraus.

Meine Abfrage würde so aussehen:

select distinct a.Nummer from TabA a, TabB b
where not (a.Nummer in b.Nummer)


gruß oki

dataspider 29. Jun 2006 10:25

Re: SQL-Befehl vergleichen zweier Tabellen
 
Hi,

SQL-Code:
select * from taba where not exists (select * from tabb
         where tabb.nummer = taba.nummer)
Ist aus dem Kopf, sollte aber gehen.

Cu, Frank

PeterRettig 29. Jun 2006 13:03

Re: SQL-Befehl vergleichen zweier Tabellen
 
Ja so funktioniert es.

Danke...

Bernhard Geyer 29. Jun 2006 21:38

Re: SQL-Befehl vergleichen zweier Tabellen
 
Iiiiiiiihhhh Subselects. Schon mal mit 1 Mio. Datensätze probiert? Könnte passieren das es ewig dauert ...

Probier lieber einen OUTER JOIN

SQL-Code:
SELECT TabA.Nummer, TabB.Nummer FROM TabA LEFT OUTER JOIN TabB ON TabA.Nummer = TabB.Nummer WHERE TabB.Nummer is NULL
Solle (wenn die Syntax aus dem Kopf) für Firefox OK ist.

dataspider 30. Jun 2006 08:01

Re: SQL-Befehl vergleichen zweier Tabellen
 
Zitat:

Zitat von Bernhard Geyer
Iiiiiiiihhhh Subselects. Schon mal mit 1 Mio. Datensätze probiert? Könnte passieren das es ewig dauert ...

Probier lieber einen OUTER JOIN

Hi Bernhard,

bring Peter bitte nicht auf eine falsche Fährte.
Exists ist IMHO die schnellste Methode, gerade wenn TabB mehrere Datensätze mit der gleichen Nummer haben kann.

Frank

Bernhard Geyer 30. Jun 2006 19:51

Re: SQL-Befehl vergleichen zweier Tabellen
 
Exists ist schnell, aber Subqueries könnnen zum Performancegrab werden wenn für jeden Datensatz in TabA eine komplette Ergebnissmenge für TabB bestimmt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.

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