2016-08-31 35 views
0

我有點新加入,所以我甚至不確定這是否可能。我一直在谷歌上搜索並嘗試一些東西..將MySQL不存在轉換爲INNER JOIN

我需要什麼:

選擇data.id其中相應的user2data.user_id不存在其中user2data.user_id =「X」

令人興奮的權利? :d

什麼工作:

SELECT * FROM data WHERE NOT EXISTS (SELECT * FROM user2data WHERE user2data.user_id=1 AND user2data.data_id=data.id) LIMIT 100; 

但是,它的速度慢,即使所有3列索引。我從另一個SO回答中嘗試了一個OUTER JOIN用於此目的,但它比上述更甚。我需要的是一個INNER JOIN。

請讓我知道這是否實際上是可能的,或者如果有替代方案利用索引。

感謝和最誠摯

+1

我建議一個*複合*'上超過user2data''(USER_ID,data_id)'指數。 – eggyal

+0

您不能對不存在的數據進行內部連接。 – shawnt00

+0

確保您加入的列已編入索引,然後外連接應快速。 – Barmar

回答

0

可能是你可以使用左連接

SELECT * 
FROM data WHERE 
LEFT JOIN user2data ON ( user2data.user_id=1 AND user2data.data_id=data.id) 
where user2data.data_id is null 
LIMIT 100; 
+0

他說他試過這個:*我爲此嘗試了一個OUTER JOIN * – Barmar

+0

@Barmar你知道我同意OP提到使用外連接。但是我也想知道OP是否提出了上面使用的正確的連接條件。 – shawnt00

+0

他說他從另一個SO答案中得到了答案。關於如何獲取不匹配另一個表的所有行的問題有很多,例如, http://stackoverflow.com/questions/21633115/return-row-only-if-value-doesnt-exist?lq=1 – Barmar