2011-12-13 84 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