SQL Query基于多个过滤器获取数据

时间:2014-10-30 03:49:58

标签: sql-server

我有以下产品表和 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查询。

1 个答案:

答案 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