【发布时间】:2015-09-23 12:23:48
【问题描述】:
原始表有三个不唯一的列,其中 id 值按组分隔数据:
id name flag
----------------------------
1 Andrey 0
1 Andrey 1
1 Olga 0
1 Sasha 0
2 Masha 1
2 Masha 0
2 Katya 1
2 Vera 0
这里我们有两组人,每组有两行同名。我想编写一个 select statemets,它与标志 0 重复名称行,当且仅当此确切名称在同一组中有 1 个标志。
因此,该数据的预期结果应该是:
id name flag
----------------------------
1 Andrey 1
2 Masha 1
因为 Andrey 和 Masha 是重复的,而且他们也有 0 标志。
我尝试选择这些值是使用如下查询:
select * from names
where flag = 1 and id in
(select id from names where flag = 0)
但它也返回 Katya 行,没有例外。
【问题讨论】:
-
请同时标记您的数据库
-
如果玛莎有一个 id = 2 和一个 id = 5 怎么办?还是返回玛莎?
-
@jarlh - 如果我们有两个 ID 为 2 和 5 的 Masha 实例,我们不需要返回它,因为这些实例位于不同的组中(id 是组的索引) .
-
@vkp - 这个问题主要是理论上的。无论如何,我指定了我现在正在使用的数据库引擎。
标签: sql sql-server select unique