SQL Server 如何从表b中只选择对于每个外键的给定列都具有相同值的行?

sycxhyv7  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(151)

我有一个只有ID的表。另一个表有ID和其他几列。其中一列是[set],供参考。
我试图只对table2中column [set]中每一行都具有相同值的ID构建连接查询,而不是只对[set]中具有重复值加上另一个不同值的ID构建连接查询,因此,table2中的每个ID可以有多行。
表一
| [id] |
| - ------|
| a1|
| a2|
表二
| [id] |[操作]|[设置]|
| - ------|- ------|- ------|
| a1|二十二|切割|
| a1|二十一|切割|
| a2|二十三|切割|
| a2|二十五|切割|
| a2|二十四|切片|
在给定的示例中,'a2'不符合条件,因为column [set]中的值不完全相同。
我的查询不起作用。

SELECT DISTINCT(A.ID)
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.ID = B.ID
GROUP BY A.ID, B.SET
HAVING COUNT(DISTINCT(B.SET)) =1
vltsax25

vltsax251#

我们是按idset分组的,所以根据定义,每个组中set只有一个值,将其从group by子句中删除就可以了,另外,因为我们是按id分组的,所以不需要distinct

SELECT   A.ID -- Distinct removed. It's not wrong, just redundant
FROM     TABLE1 A
INNER    JOIN TABLE2 B ON A.ID = B.ID
GROUP BY A.ID -- Grouping by b.set removed
HAVING   COUNT(DISTINCT(B.SET)) = 1

相关问题