2014-10-30 69 views
1

得到的數據我有以下產品表和ProductTag表 -SQL查詢基於多重過濾

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查詢,返回其兼具標籤1,所有產品清單2.結果應如下所示 -

ProductID | Product 
------------------------ 
2   |  Product_B 
3   |  Product_C 

請建議如何爲此編寫MS SQL查詢。

回答

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 
+0

完美,謝謝。 – 2014-10-30 04:21:41