Jens, meine Antwort unter Deiner war mißverständlich, aber Du warst schon gemeint. Hach ich bin eben etwas ruppig, manchmal. Und kann nicht richtig lesen. Ich hab deine Ausführungen noch nicht einmal richtig gelesen, aber schon verteufelt.
Aber bei mir funktioniert dein Vorschlag nicht. Ich habe zwar nur einen
SQL-Server (TM von MS), aber dieses Skript geht nicht:
SQL-Code:
--- Temporäre Tabellen anlegen
select 1 as ID1, 1 as ID2 into #A
union select 1,2
union select 1,3
union select 2,1
union select 2,2
select 1 as ID1, 1 as ID2 into #B
union select 1,2
union select 1,3
union select 2,1
union select 2,3
--- Vorschlag #1 (funktioniert)
select *
from #A a
left join #B b
on a.ID1=b.ID1
and a.ID2=b.ID2
where b.ID2 is null
--- Vorschlag #2 (deiner?)
Select *
from #A a
left join #B b
on a.ID1=b.ID1
and b.ID2 is null
where b.ID2 is null
Wenn man nicht weiter weiß (bei Performanceproblemen) hilft mir manchmal, einfach einen anderen ansatz zu nehmen.
Code:
select * from Tabelle1
where not exists (
select * from Tabelle2
where Tabelle1.Feld1=Tabelle2.Feld1
and Tabelle1.Feld2=Tabelle2.Feld2
)
Das kann zum identischen Queryplan führen, oder etwas komplett anderes bewirken. Wichtig hier scheint mir, einen kombinierten Index auf Tabelle2 (Feld1+Feld2) zu haben, oder?