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

问题描述 投票:0回答:1

标题可能对这个标题没什么大的帮助,所以我会尽力解释它。

假设有两个表。

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中任何值的产品的代码很简单,但我似乎无法获得与所有匹配的产品的语法。

sql sql-server relational-division
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.