PostgreSQL - получить записи с уникальной комбинацией столбцов - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу выбрать записи, которые имеют уникальную комбинацию столбцов в postgresql, но, похоже, она не работает с отличными, так как отличные только удаляют дубликаты.

Пример

ID  A  B 
01  1  2
02  1  2
03  1  3
04  2  4
05  1  4
06  2  4
07  2  5
08  1  3

В этом примере строки с ID 05 и 07 имеют уникальную комбинацию AB, как я могу получить эти записи

SELECT ...

1 Ответ

1 голос
/ 09 ноября 2019

С NOT EXISTS:

select t.* from tablename t
where not exists (
  select 1 from tablename
  where id <> t.id and a = t.a and b = t.b
)

Или с COUNT() оконной функцией:

select t.id, t.a, t.b
from (
  select *, count(id) over (partition by a, b) counter
  from tablename
) t  
where t.counter = 1

Или с агрегацией:

select max(id) id, a, b
from tablename
group by a, b
having count(id) = 1

Или сself LEFT соединение, исключающее совпадающие строки:

select t.*
from tablename t left join tablename tt
on tt.id <> t.id and tt.a = t.a and tt.b = t.b
where tt.id is null

Смотрите демо . Результаты:

| id  | a   | b   |
| --- | --- | --- |
| 05  | 1   | 4   |
| 07  | 2   | 5   |
...