2013-07-18 136 views
-3

我有3代表產品,過濾器,product_filter - 多對多的關係 我試圖篩選同類產品:過濾一對多的關係

SELECT p.* FROM product p 
INNER JOIN product_filter pf ON pf.product_id = p.id 
WHERE (pf.filter_id = 1 OR pf.filter_id = 2) AND pf.filter_id = 3 

的問題是,有一些有產品所有的過濾器(1,2,3),但我得到0的結果

請幫助:)

+0

我認爲OP希望其中一個產品具有過濾器(1,3)或(2,3) –

回答

3

對於跨產品的給定行只有一個過濾器_id。您在product_filter的同一行中沒有1和3。

爲了得到這種效果嘗試沿着這些路線的雙重連接: -

SELECT p.* FROM product p 
INNER JOIN product_filter pf1 ON pf1.product_id = p.id 
INNER JOIN product_filter pf2 ON pf2.product_id = p.id 
WHERE (pf1.filter_id = 1 OR pf1.filter_id = 2) AND pf2.filter_id = 3 
+0

感謝這麼多的人士Himanshu ..它的工作:) – purepear

+0

很高興知道:) – Himanshu

+0

順便說一句,另一種選擇是在WHERE條件中使用DISTINCT並避免連接。 – Noam