我有以下产品表和 ProductTag 表 -
ID | Product
--------------
1 | Product_A
2 | Product_B
3 | Product_C
TagID | ProductID
----------------------
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
3 | 1
3 | 2
现在我需要一个SQL查询,它返回同时包含Tag 1和2的所有产品列表。结果应如下所示 -
ProductID | Product
------------------------
2 | Product_B
3 | Product_C
请建议我如何为此编写MS SQL查询。
答案 0 :(得分:1)
SELECT p.ID, p.Product
FROM Product p
INNER JOIN ProductTag pt
ON p.ID = pt.ProductID
WHERE pt.TagID IN (1, 2) -- <== Tags you want to find
GROUP BY p.ID, o.Product
HAVING COUNT(*) = 2 -- <== tag count on WHERE clause
但是,如果TagID
在每个Product
上都不是唯一的,那么您只需计算不同的产品。
HAVING COUNT(DISTINCT pt.TagID) = 2