2016-11-30 62 views
0

使用MySQLMySQL的:多條件

我wan't實現是隻返回產品(WHERE pf.filter = 10,pf.filter = 15,pf.filter = 18),並沒有其他的產品。

我以爲下面的查詢可以工作,但它沒有給我任何結果。 當我刪除WHERE,AND條件有3行,其中pf.filter_id是10,15,18

SELECT * FROM products p 
LEFT JOIN filter pf ON (p.product_id = pf.product_id) 
WHERE pf.filter = 10 
AND pf.filter = 15 
AND pf.filter = 18 
GROUP BY p.product_id 

如何把這個SQL查詢來構建工作?

+0

看起來沒問題,你這樣做,多個AND通常很好,你確定它不是一個邏輯問題?我可以看到,你要求的過濾器等於15,並且過濾器等於18,它應該是OR –

+1

這是一個邏輯問題,一次只能有一個字段不能超過一個值。 – Uueerdo

+0

怎樣才能過濾10和15和18? – WillardSolutions

回答

1

filter的值不能同時爲10,15和18。

你可能想要的值是10或15或18:

SELECT * FROM products p 
LEFT JOIN filter pf ON (p.product_id = pf.product_id) 
WHERE pf.filter = 10 
OR pf.filter = 15 
OR pf.filter = 18 
GROUP BY p.product_id 
+1

'或'(雙關語打算)'在' – xQbert

+0

@xQbert,正確的:)'in'會在這裏給出相同的結果。 – Dekel

1

嘗試使用GROUP BYHAVING獲得具有全部三個過濾器的產品。然後,在其餘的信息聯接:

SELECT p.* 
FROM products p JOIN 
    (SELECT pf.product_id 
     FROM filter pf 
     WHERE pf.filter IN (10, 15, 18) 
     GROUP BY pf.product_id 
     HAVING COUNT(*) = 3 
    ) pf 
    ON p.product_id = pf.product_id; 
+0

看起來很有希望,明天會試試這個 – rokdazone

+0

這工作謝謝! – rokdazone

0

你的問題是該值不能在10和15和18的同時,試試這個:

SELECT * FROM products p 
LEFT JOIN filter pf ON (p.product_id = pf.product_id) 
WHERE pf.filter = 10 
OR pf.filter = 15 
OR pf.filter = 18 
GROUP BY p.product_id 

或更好

SELECT * FROM products p 
LEFT JOIN filter pf ON (p.product_id = pf.product_id) 
WHERE pf.filter IN (10, 15, 18) 
GROUP BY p.product_id 
+0

是的,從一開始這就是查詢的樣子。唯一的問題是它應該是AND而不是OR。 所以.. WHERE pf.filter IN(10,15,18,999)應該給我沒有結果,因爲沒有filter_id = 999 – rokdazone

+0

IN(10,15,18,999)等價於OR filter = 10 OR過濾器= 15或過濾器= 18或過濾器= 999.因此,如果你甚至沒有999,它仍然顯示第10,15和18行 – AlecTMH