标题可能对此不大,所以我会尽力解释它。
假设有两个表。
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中的任何值匹配的产品的代码很简单,但我似乎无法使所有匹配产品的语法正确。
答案 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)