2017-07-27 74 views
1
SELECT COALESCE(table2.value, table3.value) FROM table1 
JOIN table2 ON (table1.value = table2.value) 
JOIN table3 ON (table1.value = table3.value) 

table1.value = table2.valuetable1.value = table3.value是互斥的(它們中的至多一個爲真)。MySQL的JOIN如果任一2代表的滿足條件

只有在table1.value = table2.valuetable1.value = table3.value爲真時,我如何才能使連接發生?

這是唯一的解決辦法? (這是相當繁瑣的)

SELECT table.value FROM table1 
JOIN 
(SELECT COALESCE(table2.value, table3.value) FROM table1 
LEFT JOIN table2 ON (table1.value = table2.value) 
LEFT JOIN table3 ON (table1.value = table3.value) 
) as table ON (table1.value = table.value) 

回答

2

您可以使用兩個查詢和UNION他們,例如:

SELECT COALESCE(table1.value, table2.value) FROM table1 
JOIN table2 ON (table1.value = table2.value) 

UNION 

SELECT COALESCE(table1.value, table3.value) FROM table1 
JOIN table3 ON (table1.value = table3.value) 
0

嘗試使用內部連接和工會兩個表

SELECT * FROM 
(SELECT value, data FROM table1) as a 
INNER JOIN 
(SELECT value, data FROM table2) as b 
ON b.value = a.value 
UNION ALL 
(SELECT value, data FROM table1) as a 
INNER JOIN 
(SELECT value, data FROM table3) as b 
ON b.value = a.value 

INNER JOIN意志避免把兩個表是空只會加盟誰也都表上準確找到那些行。在UNION我們只是假設,在第一加入其他表3將不會包含有那麼它作爲一個單獨的連接和UNION它或將它合併到第一個,這樣你可以有一個查詢/表按所有數據只要記住在使用UNION ALL結果應該有,你想獲取的確切名稱或字段。