Return 行列表,如果所有记录都存在于 sql 服务器中的另一个 table
Return list of rows if all records exist in another table in sql server
理论上是简单的查询,但我无法理解所需的语法,不确定如果调用查询是什么类型/如何措辞,这使得 google 很难找到解决方案. SQL 服务器 2014
我基本上想要 return 一个用户 ID 列表,如果他们的所有记录都存在于另一个 table。
例子
用户
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
查找Table
ID
50
55
60
预期结果
UserId
2
4
我希望 'Expect Results' 显示用户 ID 列表,其中每个用户的 'Lookup'(另一个 table)中的所有 ID 都出现在 'UsersResults' 中。用户“2”在 UserRecords 中有一条不在 'Lookup' 中的附加记录,但我仍然希望他们的 ID return 包含在有效结果列表中
如果我知道这是什么类型的查询,我或许可以自己找到答案
谢谢
您可以使用 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)
。
理论上是简单的查询,但我无法理解所需的语法,不确定如果调用查询是什么类型/如何措辞,这使得 google 很难找到解决方案. SQL 服务器 2014
我基本上想要 return 一个用户 ID 列表,如果他们的所有记录都存在于另一个 table。
例子
用户
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 |
查找Table
ID |
---|
50 |
55 |
60 |
预期结果
UserId |
---|
2 |
4 |
我希望 'Expect Results' 显示用户 ID 列表,其中每个用户的 'Lookup'(另一个 table)中的所有 ID 都出现在 'UsersResults' 中。用户“2”在 UserRecords 中有一条不在 'Lookup' 中的附加记录,但我仍然希望他们的 ID return 包含在有效结果列表中
如果我知道这是什么类型的查询,我或许可以自己找到答案
谢谢
您可以使用 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)
。