假设我有一张桌子product_tag
:
product_id | tag_id
-----------+-------
123 | 100
123 | 101
124 | 100
我可以找到至少有一个这样的标签的所有产品:
SELECT DISTINCT product_id
FROM product_tag
WHERE tag_id IN (100, 101)
但如果我只想要包含所有标签的产品,我需要添加更多连接:
SELECT DISTINCT product_id
FROM product_tag pt1, product_tag pt2
WHERE pt1.tag_id = 100 AND pt2.tag_id = 101
如果有很多标签,这会非常痛苦。所以我正在使用它:
SELECT product_id
FROM product_tag
WHERE tag_id IN (100, 101)
GROUP BY product_id
HAVING count(*) = 2
这样写起来更友好,但对查询规划器并不友好。在SQL中是否有适当的方式来执行此操作?