【问题标题】:Return list of rows if all records exist in another table in sql server如果所有记录都存在于 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

如果我知道这是什么类型的查询,我可能自己就能找到答案

谢谢

【问题讨论】:

标签: sql sql-server 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 子句中包含过滤器即可。
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 2013-02-18
  • 2020-05-11
  • 2014-09-06
  • 1970-01-01
  • 2014-02-21
  • 2019-12-03
  • 2021-09-03
相关资源
最近更新 更多