从第二个表中查找与所有记录匹配的ID

时间:2017-03-19 07:28:21

标签: mysql sql-server database

我有两张桌子。如何选择包含所有作者的独特书店?

表1:

author
1
2
3

表2:

bookstore  author
A             1
A             2
A             3
B             1
B             2

预期结果:

bookstore
A

2 个答案:

答案 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

在这里演示:

Rextester

答案 1 :(得分:0)

您只需要在table2进行聚合,以了解每个书店所涵盖的作者数量。然后最后一个过滤条件(HAVING)来选择涵盖每个作者的条目。

    SELECT [bookstore]
      FROM [dbo].[table2]
  GROUP BY [bookstore]
    HAVING COUNT(DISTINCT [author]) = (SELECT COUNT(DISTINCT [author]) FROM [dbo].[table1])