Select 基于列值的唯一行

Select unique rows based on column value

原来的table有三个不唯一的列,其中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,当且仅当这个确切的名称在同一组中有 1 个标志时,它重复带有标志 0 的名称行。

因此,此数据的预期结果应为:

id  name                flag
----------------------------
1   Andrey              1
2   Masha               1

因为安德烈和玛莎是重复的,他们也有 0 个标志。

我尝试 select 这些值是使用如下查询:

select * from names
    where flag = 1 and id in
    (select id from names where flag = 0)

但也是 returns Katya 行,没有例外。

您可以使用 intersect 运算符来获得具有两个标志的 name

select name from names where flag = 0
intersect 
select name from names where flag = 1

在MySQL,你可以做到,

select n1.name 
from names n1 
join names n2 on n1.name = n2.name and n2.flag = 1
where n1.flag = 0

您可以使用 EXISTS:

SELECT n.* FROM  Names n
WHERE n.flag = 1
AND EXISTS
(
  SELECT 1 FROM Names n2
  WHERE n.id = n2.id 
    AND n.name = n2.name
    AND n2.flag = 0
)