2012-04-02 2 views
1

Have query:Wie make SQL-Abfrage "nicht in" einfacher verwenden nur "Join"?

select a.id from selzde.elorder a 
inner join selzde.elorder b on a.name = b.name 
    and a.workname = b.workname 
    and b.id = needId 
where a.id not in (select id_elorder from selzde.drugselorder) 

wie SQL-Abfrage not in mehr einfach nur join nutzen machen?

+5

ist Warum genug NICHT nicht einfach? Ein JOIN wird schwerer zu lesen sein ... – Thilo

+0

Ich frage mich, wieviel kostet 'Join'. – artzub

Antwort

2
select a.id from selzde.elorder a 
inner join selzde.elorder b on a.name = b.name 
and a.workname = b.workname 
and b.id = needId 
left outer join selzde.drugselorder d on a.id = d.id_elorder 
where d.id_elorder is null 
+2

Das ist ein IN, oder? Nicht ein NICHT IN – Thilo

+0

@ Thilo: Du hast Recht. Korrigiert das. –

2

links nach drugselorder verbinden, auf id_elorder = a.id, dann die, die ohne Spiel wählen (das heißt where drugselorder is null) ... Ich würde nicht mehr „einfach“ nicht sagen, es ist, though.

+0

Ich hatte gehofft, dass ich die Verwendung von 'wo' vermeiden kann – artzub

1

Eine Lösung wäre MINUS Operator zu verwenden, anstatt nicht in wie folgt:

select a.id 
from selzde.elorder a 
    inner join selzde.elorder b 
on a.name = b.name  
and a.workname = b.workname  
and b.id = needId 
MINUS 
select id_elorder 
from selzde.drugselorder 
; 

Hoffnung, das hilft.

Grüße, Roger