SQL - 返回与连接表中的所有值匹配的行

时间:2014-03-13 13:17:03

标签: sql sql-server relational-division

标题可能对此不大,所以我会尽力解释它。

假设有两个表。

Product (ProductID, Name)
ProductCategory (ID, ProductID, CategoryID)

和第三个临时表,其中包含要匹配的CategoryID列表。

MatchTable(CategoryID)

我想使用MatchTable的内容返回包含所有相关类别的产品。 IE。

Product 1: Associated with categories 1 and 2.
Product 2: Associated with categories 2 and 3.
Product 3: Associated with categories 1, 2 and 3.

如果MatchTable包含1和2,我想返回产品1和3,因为它们符合条件。如果MatchTable包含2,那么将返回所有产品。

返回与MatchTable中的任何值匹配的产品的代码很简单,但我似乎无法使所有匹配产品的语法正确。

1 个答案:

答案 0 :(得分:2)

猜猜我会测试匹配计数与匹配表中的行数

select p.ProductID, max(p.Name)
from Product p
inner join ProductCategory c on c.ProductID = p.ProductID
inner join MatchTable m on m.CategoryID = c.CategoryID
group by p.ProductID
having COUNT(*) = (select COUNT(*) from MatchTable)

请参阅fiddle