2009-01-08 75 views
4

我可以在sybase中完成,我可以在oracle中完成,但是我沒有看到如何在mysql中完成它。如何在mysql中結合內連接和外連接

我有這樣的: (請剋制自己從重新格式化我的SQL,最後一次有人這樣做,他們改變了它,所以它是不一樣的,並提出問題毫無意義)

select table1.id 
from 
table1 
    inner join 
    table2 on (table1.id = table2.id and table2.data='cat'), 
table1 t1 
    left outer join 
    table3 on (t1.id = table3.id and table3.data = 'dog') 

我得到各種毫無意義的結果。

我想從table1中獲取所有id的列表,其中table2.data = cat,然後對table3的數據進行外部連接,其中table3.data = dog。

我注意到我無法爲兩個連接子句中的table1指定相同的表/別名,所以這使我相信mysql正在單獨運行連接表達式,並將結果或在一起或類似的東西。

我也嘗試擺脫了從內部的「內部連接」,並把它放在where子句,即使沒有工作,雖然它沒有以不同的方式工作(得到不同的錯誤結果)

這在sybase或oracle中會很容易。

我在做什麼錯?

回答

13
select table1.id 
from 
table1 
    inner join 
    table2 on (table1.id = table2.id and table2.data='cat') 
    left outer join 
    table3 on (table1.id = table3.id and table3.data = 'dog') 

我想你永遠不想在from語句中使用逗號。我相信逗號相當於說交叉連接。雖然不確定,但我認爲這個查詢就是你要找的。

+0

使用逗號語法,通常情況下,您可以通過在WHERE子句中添加條件來防止它成爲交叉連接。 – 2009-01-08 05:34:09