2013-06-20 86 views
0

--query 1是什麼這兩個之間的區別查詢

select distinct af.Code from AIR af inner join 
Float spf on spf.Station = af.AirID or 
spf.DeptStation = af.AirID 

--query 2

select distinct af.Code from AIR af 
    inner join Float spf on spf.Station = af.AirID 
    inner join Float spf1 on spf.DeptStation = af.AirID 

在第一個查詢我得到一些更多的條目(大約10)比較時,第二。根據我的看法,這種差異不應該存在。如果有人可以分解查詢來告訴我的差異(如果有),這將是有益的。

+0

http://stackoverflow.com/questions/5901791/is-having-an-or-in-an-inner-join-condition-a-bad-想法 –

+1

第一個使用'OR',而第二個使用'AND'。因此,第一個查詢將返回具有匹配站**或**匹配的部門站的所有記錄。第二個更嚴格,因爲它只返回兩個匹配的記錄。所以它類似於(如Bastos寫的)'內部連接浮點spf在spf.Station = af.AirID和spf.DeptStation = af.AirID'上。 –

+0

@TimSchmelter它仍然不清楚對我:(對不起, –

回答

0

此查詢:

select distinct af.Code from AIR af 
inner join Float spf on spf.Station = af.AirID 
inner join Float spf1 on spf1.DeptStation = af.AirID 

等於一個 「和」 加入

select distinct af.Code from AIR af 
inner join Float spf on spf.Station = af.AirID and spf.DeptStation = af.AirID 

編輯 你有你的第二個查詢產生了錯誤。它應該是

內對spf1.DeptStation = af.AirID

+0

很好等於在結果中,而不是在執行... :) –

+0

我不同意 - 與'和'邏輯我得到5多行比'查詢2' –

+0

您是否糾正了'query 2'的邏輯? –

0

在第二次查詢中加入浮動SPF1,你在同一時間匹配一個AirID前行2個不同的值(AND ) 所以,JOIN只給出結果匹配這當然是無稽之談。

在第一個查詢,你匹配一個AirID到一個 2個不同的列(或) 所以,你得到正確的結果,因爲當它要麼

匹配,就可以改寫第一個爲這可能有助於證明或岬

select af.Code from AIR af 
    inner join Float spf on spf.Station = af.AirID 
UNION 
select af.Code from AIR af 
    inner join Float spf on spf.DeptStation = af.AirID