我對Informix數據庫運行2個查詢。查詢使用內連接和外連接打擊4個不同的表。我認爲他們都應該返回相同的結果集,但我得到了3個記錄差異。這兩個查詢如下所示:Informix查詢異常
查詢1(返回65行) -
select ...
from table1, table2, outer table3, outer table4
where table1.id = table2.id
and table1.id = table3.id
and table1.id = table4.id
and .....
查詢2(返回62行) -
select ....
from table1 inner join table2 on table1.id = table2.id
left outer join table3 on table1.id = table3.id
left outer join table4 on table1.id = table4.id
where .....
沒有人有任何想法,爲什麼這兩個回報不同的結果集?我認爲通過改變使用內部連接/左外部連接而不是僅使用外部(並且沒有任何內部連接)會返回相同的結果。
是的,表3和表4中的列有條件。你所解釋的是最肯定發生的事情。我只需要嘗試堅持原始查詢。我是否正確地假設第一個查詢是最正確的? – czuroski 2010-09-01 14:48:30
@czuroski:「第一個查詢最正確嗎?」他們只是不同的問題 - 你需要知道哪一個能產生你需要的答案。考慮到您的應用程序最初是使用Informix風格的連接編寫的,這可能會爲您的應用程序提供正確的結果 - 因此是更好的選擇。但是,您可以修改應用程序以使用ISO(標準)聯接;你可能會稍微改變一下這個查詢,就是這樣。我還沒有計算出是否有辦法通過ISO連接來實現Informix風格的結果,但我知道這不是微不足道的。 – 2010-09-01 16:20:04
我知道這是一箇舊的評論,但我想知道是否可能在條件的放置:在WHERE子句(返回62行)或在'JOIN ... ON'子句中。後者的放置可能會返回相加的3行。 – Menachem 2015-02-11 23:13:29