2014-01-07 59 views
-3

我有這個查詢可以工作,但需要30分鐘計算。我知道IN很慢,但正在尋找一個連接替代方案。使用JOIN重寫此查詢以獲得更快的結果

SELECT *, COUNT(*) as Results from member_preferences_products_data 
     WHERE member_preferences_products_data.Member_ID IN (SELECT Member_ID from member_preferences_products_data WHERE Product_ID = '623') 
     GROUP by Product_ID 
     ORDER by Results asc 
     LIMIT 10 
+1

而且我相信你已經做了一些研究或搜索,你現在要編輯你的問題並將其添加進來......當然,你不只是要求我們爲你做你的工作? –

+0

我試過了,但它會產生錯誤的結果。我在其他查詢中都有很多連接,所以我不知道爲什麼我的連接不工作。 –

+0

加油。讓我們看看JOIN – Strawberry

回答

0

直接替換你的查詢是

SELECT *, COUNT(*) as Results 
FROM member_preferences_products_data 
INNER JOIN 
(
    SELECT DISTINCT Member_ID 
    FROM member_preferences_products_data 
    WHERE Product_ID = '623' 
) Sub1 
ON member_preferences_products_data.Member_ID = Sub1.Member_ID 
GROUP by Product_ID 
ORDER by Results asc 
LIMIT 10 

不過我有點困惑你正在努力尋找。您似乎希望計算每個產品ID的行數,其中產品ID已由購買產品ID爲623的成員購買。

另外,如果字段Product_ID是字符串或INT。如果一個INT不需要引號,但如果它是一個字符串,那麼它可能會比INT字段慢,假設這些值是數字的

+0

完美的作品。謝謝。這正是我期待的結果。 –

相關問題