2015-08-31 43 views
3

我工作的一個查詢加入工會結果外查詢與和這樣的它是一個很好的做法在MySQL

SELECT a.c1, a.c2, b.c3, b.c4 
FROM table4 AS a 
LEFT JOIN ((
    SELECT c1, c2 FROM table1 LEFT JOIN table2 ... something 
) UNION ALL (
    SELECT c3, c4 FROM table1 LEFT JOIN table3 ... something 
)) AS b 

ON a.key = b.key 
WHERE a.key ... something 
ORDER BY a.key 

,因爲我想這工作完全並沒有太大執行的解決方案上來使用時間。但是,我覺得有一個奇怪的結果是UNION子句在另一個SELECTJOIN與查詢中的另一個表編輯。

所以我的問題是:這是一個很好的做法,使用這樣的查詢。或者我應該找到更好的解決方案?

+0

我會先放'table4'並使用'left join'(一個首選項)並嘗試使用'union all'而不是'union'。我們無法決定這是否適合您。 –

+0

謝謝@GordonLinoff。我之所以把table4放在後面,只是因爲我先寫了UNION。也許我應該改變。 - 聯盟似乎是一個好主意,我之前沒有聽說過。相應編輯問題。 – anuith

回答

2

這個查詢是相當複雜的,但是否需要爲你想達到什麼樣的這種複雜性,是不是這裏的問題。我們也不能回答這個問題,不知道你的表格結構,真正的查詢和期望的結果。

但是對於技術方面:您的查詢完全沒問題。如果這是獲得所需數據的最直接的方式,那就沒有任何反對意見。沒有規定你不應該加入聯合結果等。你只需將你的數據一步一步地放在一起,如果你最終得到這個查詢,就是這樣。

至於UNION與UNION ALL,正如Gordon Linoff所提到的那樣:經常發生某人寫UNION而不是UNION ALL,因此不願意給DBMS更多的工作來做必要的工作。但是,對於您的情況,它可能會更改結果,因此您必須考慮UNION查詢中是否可以重複以及是否希望它們被刪除。

0

試試這個,在我看來,它應該會更好

SELECT a.c1,a.c2,b.c3,c.c4 
FROM table1 as a 
LEFT JOIN table2 as b on ... 
LEFT JOIN table3 as c on ... 
WHERE something 
ORDER BY a.key 
相關問題