2015-05-20 43 views
0

假設我有表A,在B ID是唯一的,但表B中,ID不是唯一的使用不同行的加入MySQL的

我想SELECT DISTINCT ID

查詢1:

SELECT DISTINCT ID從一個LEFT JOIN b b ON a.ID = B.ID WHERE ...

查詢2:

SELECT DISTINCT ID從WHERE ID IN(SELECT d ISTINCT ID FROM B,其中...)

SELECT DISTINCT ID從一個LEFT JOIN(SELECT DISTINCT ID FROM B)B關於a.ID = B.ID WHERE ...

最終的結果是相同的,但

什麼查詢1發生的臨時表的空間更從表B中多行會與重複ID

在查詢2我能夠優化空間和進一步的處理因爲它將限制所有不同ID的行

是否有任何方式使用連接和避免子查詢來使用表B中的DISTINCT行?

其實我有甚表C中,我將與此一起,所以我需要照顧參加第二次參加正與臺還加入C.

+1

嘗試'GROUP BY a.ID' – Wolph

+0

注意:查詢1和2的結果不必相同,因爲您使用的是'LEFT JOIN',所以查詢1也會返回表B中不匹配的行。 –

+0

我已經在問題中進行了編輯,我們假設我們基於我們爲了避免子查詢而放置 – user2368055

回答

0
SELECT DISTINCT ID FROM A a LEFT JOIN (SELECT DISTINCT ID FROM B) b ON a.ID = B.ID WHERE ... 

時的行數這是什麼你要?

編輯所以答案是一個比較明顯的:

由於您的A是唯一的,但B不是你可以交換值:

SELECT DISTINCT ID FROM B b LEFT JOIN A a on a.ID = b.ID WHERE... 
+0

的條件具有相同的結果,因爲來自表B的DISTINCT行將會更高,子查詢可能會影響性能 – user2368055

+0

看來你的A是唯一的,但B不是這樣你可以做一些像這樣的:SELECT DISTINCT ID FROM B b LEFT JOIN a a on a.ID = b.ID –

+0

yup agree,that should be the正確的路要走 – user2368055