如果所有记录都存在于 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】:

您可以使用joingroup 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 的另一个表中,则返回行列表的主要内容,如果未能解决你的问题,请参考以下文章

如果元素存在于数据框的另一列中,则删除列表元素

检查每组的另一列中是不是存在列值

列出存在于另一个模型中的所有关联模型记录,该模型存在于 rails 中的另一个命名空间中

如果同一表的另一列中存在值,如何找到对应的列值

SQL Server 分页编号的另一种方式

表中的一列引用 SQL 中存在重复数据的另一列