2011-12-13 105 views
1

我有一個查詢問題的產品:選擇從過濾器

我有3個表: 產品(ID,姓名) 設置(ID,姓名) product_setting(產品,setting_id)

例如:我想只選擇您選擇過濾器的產品!

我這樣做:

SELECT p. *, s.id as setting 
FROM Products p 
INNER JOIN product_setting p2 ON (p.id = p2.product_id) 
INNER JOIN settings s ON (s.id = p2.setting_id) 
WHERE s.id IN (1,2) 

但我得到的是有「設置」 ID = 1個或ID = 2 如何獲得只有那些那些「設置」這些產品(AND)所有產品?

謝謝!!

回答

2
SELECT p.*, s.id as setting 
FROM Products p 
INNER JOIN product_setting p2 ON (p.id = p2.product_id) 
INNER JOIN settings s ON (s.id = p2.setting_id) 
WHERE s.id IN (1,2) 
GROUP BY p.id 
HAVING COUNT(*)=2; // size of IN() 
+0

這似乎是過於放肆的數據。考慮可能存在多個設置的情況。雖然這是一個可能被阻止的外部問題,但如果系統中允許有錯誤的數據,這可能很容易導致錯誤。 – Glenn 2011-12-13 17:57:52

+0

是啊!謝謝... – Mauro 2011-12-14 09:07:06

0

這似乎是過來殺掉,但...

SELECT p. *, s.id as setting 
FROM Products p 
INNER JOIN product_setting p2 ON (p.id = p2.product_id) 
INNER JOIN settings s ON (s.id = p2.setting_id) 
INNER JOIN settings s2 ON (s.id = p2.setting_id) 
WHERE 
    s.id = 1 
    AND s2.id = 2