首页 > 解决方案 > PostgreSQL。如果某列中的值出现两次或更多次,则排除行

问题描述

有一个“代码”表:

+---------+---------+
| numbers | letters |
+=========+=========+
| 1       | a       |
+---------+---------+
| 2       | b       |
+---------+---------+
| 3       | a       |
+---------+---------+
| 4       | c       |
+---------+---------+
| 5       | a       |
+---------+---------+
| 6       | b       |
+---------+---------+

“数字”列中的值是唯一的(如“id”)。

如果“字母”值出现两次或更多次,则需要排除行。

结果应如下所示:

+---------+---------+
| numbers | letters |
+=========+=========+
| 4       | c       |
+---------+---------+

我怎样才能得到那个查询?

标签: sqlpostgresql

解决方案


我会使用:

select min(number), letter
from codes
group by letter
having count(*) = 1;

如果保证数字是唯一的,那么not exists可能是最快的解决方案:

select c.*
from codes c
where not exists (select 1
                  from codes c2
                  where c2.letter = c.letter and c2.number <> c.number
                 );

推荐阅读