Zweiteilige Primärschlüssel vergleichen

ukulele

Datenbank-Guru
Beiträge
4.702
Habe an einer Stelle nach wie vor ein Problem das auf meine Performance geht. Ich habe zwei Spalten mit UNIQUEIDENTIFIERn, die zusammen sowas wie den PK bilden. Nun muss ich alle Datensätze aus Tabelle A finden, die nicht in Tabelle B vorhanden sind. Normalerweise würde ich
Code:
SELECT    *
FROM    t1
WHERE    pk NOT IN (    SELECT    pk
                    FROM    t2 )
machen, was natürlich mit 2 Schlüsseln nicht geht. Ich kann beide als VARCHAR Verketten und dann vergleichen, aber das dauert bei ca. 2 Mio Datensätzen einfach zu lange...
 
Werbung:

PLSQL_SQL

SQL-Guru
Beiträge
176
Hy,

so.. bitte nehmt bei solchen Vergleichsstatements IMMER "EXISTS" !!!!

SELECT *
FROM t1
WHERE NOT EXISTS ( SELECT 1
FROM t2
where t2.pk = t1.pk )


Dann sollte es auch mit Verketten gehen!


Nachtrag: EXISTS ist viel performanter als IN!!!

Weiters kannst du deine PKS besser vergleichen!

SELECT *
FROM t1
WHERE NOT EXISTS ( SELECT 1
FROM t2
where t2.pk1 = t1.pk1
AND t2.pk2 = t1.pk2



)

LG
 
Oben