2012-04-02 71 views
1

有無查詢:如何讓sql查詢「不在」更簡單地只使用「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) 

如何使SQL查詢not in更簡單地只使用join

+5

爲什麼不是不夠簡單? JOIN將更難以閱讀... – Thilo 2012-04-02 08:39:45

+0

我想知道多少費用'加入'。 – artzub 2012-04-02 08:45:48

回答

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

這是一個IN,對吧?不是不在 – Thilo 2012-04-02 08:41:24

+0

@Thilo:你說得對。糾正了這一點。 – 2012-04-02 08:46:25

2

LEFT JOIN到drugselorder,在id_elorder = a.id,然後選擇與不匹配(即where drugselorder is null)中的那些......我不會說這是更多的「簡單」,雖然。

+0

我希望能避免使用'where' – artzub 2012-04-02 08:53:04

1

一個解決辦法是使用減號運營商,而不是不如下:

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 
; 

希望這有助於。

Regards, Roger