AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Befehl vergleichen zweier Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Befehl vergleichen zweier Tabellen

Ein Thema von PeterRettig · begonnen am 29. Jun 2006 · letzter Beitrag vom 30. Jun 2006
Antwort Antwort
PeterRettig

Registriert seit: 4. Jun 2003
Ort: Schleiz
65 Beiträge
 
Delphi 4 Client/Server
 
#1

SQL-Befehl vergleichen zweier Tabellen

  Alt 29. Jun 2006, 10:01
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos
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.
Warum kann man Atommüll nicht auf dem Mars lagern?
Mars bringt verbrauchte Energie sofort zurück!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 29. Jun 2006, 10:08
Hallo Peter,

die Mengendifferenz kannst du so bilden:

SELECT DISTINCT Nummer FROM TabA WHERE Nummer NOT IN (SELECT Nummer FROM TabB) Grüße vom marabu
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 29. Jun 2006, 10:11
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
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 29. Jun 2006, 10:25
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
Frank Reim
  Mit Zitat antworten Zitat
PeterRettig

Registriert seit: 4. Jun 2003
Ort: Schleiz
65 Beiträge
 
Delphi 4 Client/Server
 
#5

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 29. Jun 2006, 13:03
Ja so funktioniert es.

Danke...
Warum kann man Atommüll nicht auf dem Mars lagern?
Mars bringt verbrauchte Energie sofort zurück!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 29. Jun 2006, 21:38
Iiiiiiiihhhh Subselects. Schon mal mit 1 Mio. Datensätze probiert? Könnte passieren das es ewig dauert ...

Probier lieber einen OUTER JOIN

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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 30. Jun 2006, 08:01
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: SQL-Befehl vergleichen zweier Tabellen

  Alt 30. Jun 2006, 19:51
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 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