我有两张桌子。如何选择包含所有作者的独特书店?
表1:
author
1
2
3
表2:
bookstore author
A 1
A 2
A 3
B 1
B 2
预期结果:
bookstore
A
答案 0 :(得分:3)
有很多方法可以解决这个问题。此答案在两个表之间使用INNER JOIN
。此联接将删除table2
中具有不匹配作者的所有条目。然后,我们会聚合每个书店并检查以确保我们留下来自table1
的每位作者。
SELECT t2.bookstore
FROM table2 t2
INNER JOIN table1 t1
ON t1.author = t2.author
GROUP BY t2.bookstore
HAVING COUNT(DISTINCT t2.author) = (SELECT COUNT(*) FROM table1)
请注意,我假设每个作者只在table1
中出现一次。如果那里也可能存在重复,那么你应该使用这个子查询计算作者:
SELECT COUNT(DISTINCT author) FROM table1
在这里演示:
答案 1 :(得分:0)
您只需要在table2进行聚合,以了解每个书店所涵盖的作者数量。然后最后一个过滤条件(HAVING)来选择涵盖每个作者的条目。
SELECT [bookstore]
FROM [dbo].[table2]
GROUP BY [bookstore]
HAVING COUNT(DISTINCT [author]) = (SELECT COUNT(DISTINCT [author]) FROM [dbo].[table1])