postgres 7.4 umkehrung eines select

emacsen

Grünschnabel
benutze das bei Debian Sarge mitglieferte Postgres 7.4 und habe wahrscheinlich eine Gedankenblockade, folgende Anfrage funktioniert und liefert auch die erwarteten Ergebnisse:
Code:
SELECT	tabelle1.nr1 AS name
FROM	tabelle1, tabelle2
WHERE	tabelle1.nr1 = tabelle2.nr2
beide spalten sind vom typ int4

Mich interessieren aber nur die Werte die nicht in Tabelle2.nr2 auftauchen
wenn ich aus dem "=" ein "!=" mache, ist das syntaktisch immer noch korrekt, die Anfrage dauert aber ewig lange und der client stürzt irgendwann ab. Erwarten tue ich unter 5000 Datensätze. Speichermangel ist ausgeschlossen.
Irgendwelche Ideen?
 
Die von dir formulierte zweite Anfrage liefert dir für jeden Eintrag aus Tabelle 1 je eine Zeile für jeden Eintrag aus Tabelle 2 außer wenn Tabelle1.nr = Tabell2.nr
Fazit: Du bekommst also fast das Produkt der Datenmenge!
Das wird ziemlich viel sein.

Was Du suchst ist aber Alle aus Tabelle1 die nicht (auch) in Tabelle2 stehen, oder?

Weiß nicht genau die Syntax von Postgres, unter MySql könnte man glaub ich schreiben:
SELECT
tabelle1.nr1 as name,
FROM tabelle1 left join tabelle2 on tabelle1.nr1 =tabelle2.nr2
WHERE
tabelle2.nr2 is Null

Du verknüpfst also beide Tabellen über die Nummer, betrachtest (durch LEFT JOIN) aber auch die Einträge in denen in Tabelle2 kein Eintrag gefunden werden kann.
Und eben diese Einträge, die keinen Eintrag in Tabelle2 haben, filterst Du mit dem Where tabelle2.nr2 is null aus.

Hoffe es hilf Dir weiter (is halt MySql-Syntax)
vop
 
Besten Dank,

sitze halt das erstemal vor einem Datenbankproblem. Ist reines SQL und funktioniert daher wohl datenbankunspezifisch. Da die in der vorgeschlagenen Lösung zurückgelieferte Anzahl von Datensätzten aufsummiert mit der Anzahl meiner "="-Abfrage die korrekte Anzahl der gesamten Datensätze aus Tabelle1 ergibt, scheint es die Lösung für mich zu sein (auch wenn ich es noch nicht ganz durchdrungen habe, totzdem auch danke für die Erklärung).
 
Zurück