2014-01-10 46 views
1

我試圖尋找表3的行具有在表1或表2 ID匹配該查詢多個搜索與加盟

SELECT T1.*, T3.*,T2.* 
FROM (
    select id 
    from table1 
    where condition like '%field%') T1 
inner join table3 T3 
ON T3.id=T1.id 
left join (
    select id 
    from table2 
    where condition like '%field%') T2 
ON T3.id=T2.id 

如果表T1有比賽,但在表2不,查詢作品好,但如果在table1中沒有匹配,但在table2中查詢不會顯示任何結果。

有人可以幫助我嗎?

感謝

+0

你有內部之間的連接T1和T3以及T3和T2之間的左連接。將你的內連接變成正確的連接。 – wxyz

+0

嗨,謝謝,但有正確的加入,顯示與嵌套querys壞數學。看看AdrianBR的答案。 – Hanzo

回答

2

做左的連接,以避免不包括行,並添加你需要的可讀性起見條件的地方,避免右連接和僅僅指剛使用正確的表順序

SELECT T1.*, T3.*,T2.* 
FROM Table3 T3 

left join (
    select id 
    from table1 
    where condition like '%field%') T1 
ON T3.id=T1.id 

left join (
    select id 
    from table2 
    where condition like '%field%') T2 
ON T3.id=T2.id 

where t3.id is not null or t2.id is not null 
+0

with'where t1.id not null或t2.id not null'查詢工作正常。謝謝 – Hanzo

+0

一些教程,以提高querys中的表順序? – Hanzo

+0

只是谷歌的關係代數。約定是在寫作時從最左邊的表格開始。這是關於可讀性和你能夠遵循的邏輯,因爲否則mysql本身不關心訂單,並寫出自己的執行計劃 – AdrianBR