如果所有记录都存在于 sql server 的另一个表中,则返回行列表
Posted
技术标签:
【中文标题】如果所有记录都存在于 sql server 的另一个表中,则返回行列表【英文标题】:Return list of rows if all records exist in another table in sql server 【发布时间】:2021-01-26 13:34:40 【问题描述】:理论上是简单的查询,但我无法理解所需的语法,不确定如果调用查询是什么类型/如何措辞,这使得谷歌难以找到解决方案。 SQL Server 2014
如果他们的所有记录都存在于另一个表中,我基本上想返回一个用户 ID 列表。
例子
用户
ID | Name |
---|---|
1 | User1 |
2 | User2 |
3 | User3 |
4 | User4 |
5 | User5 |
用户记录
ID | UserId | Record |
---|---|---|
100 | 1 | 50 |
101 | 1 | 52 |
102 | 1 | 55 |
103 | 2 | 50 |
104 | 2 | 52 |
105 | 2 | 55 |
106 | 2 | 60 |
107 | 3 | 50 |
108 | 3 | 55 |
109 | 3 | 61 |
110 | 4 | 50 |
111 | 4 | 55 |
112 | 4 | 60 |
113 | 5 | 60 |
查找表
ID |
---|
50 |
55 |
60 |
预期结果
UserId |
---|
2 |
4 |
我希望“期望结果”显示用户 ID 列表,其中“查找”(另一个表)中的所有 ID 都出现在每个用户的“用户结果”中。用户“2”在 UserRecords 中有一条不在“查找”中的附加记录,但我仍然希望在有效结果列表中返回他们的 ID
如果我知道这是什么类型的查询,我可能自己就能找到答案
谢谢
【问题讨论】:
您要查找的词是Relational Division 【参考方案1】:您可以使用join
和group by
。假设您在 userrecords
中没有重复项(如您的示例数据):
select ur.userid
from userrecords ur join
lookup lu
on ur.record = lu.id
group by ur.userid
having count(*) = (select count(*) from lookup);
如果您在 userrecords
中有重复项,请使用 count(distinct record)
。
【讨论】:
谢谢,抱歉,应该添加更多信息。 UserRecords 中会有重复的记录,但是还有另一列可以识别记录是否已存档,以便我可以对其进行过滤。谢谢,我会试试你的建议 @JimmyDC 。 . .只需在where
子句中包含过滤器即可。以上是关于如果所有记录都存在于 sql server 的另一个表中,则返回行列表的主要内容,如果未能解决你的问题,请参考以下文章