1

我有一个查询问题:

我有 3 个表: products (id, name) settings (id, name) product_setting (product_id, 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)的产品?

谢谢!!

4

2 回答 2

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()
于 2011-12-13T17:34:46.797 回答
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
于 2011-12-13T17:51:34.910 回答