Как я могу удалить строки, которые дублируются в некоторых столбцах? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующая таблица:

Id    color    size
1     blue     medium
2     blue     medium
3     blue     small
4     red      big

I, чтобы исключить все строки, у которых есть дублированный цвет и размер, но другой идентификатор. Но имейте в виду, что я не хочу оставлять один из них, я хочу исключить оба, которые имеют одинаковый цвет и размер, но разные идентификаторы. Итак, это будет моя финальная таблица:

Id    color    size
3     blue     small
4     red      big

Я нашел этот пост Удалить повторяющиеся записи в PostgreSQL и этот https://www.postgresqltutorial.com/how-to-delete-duplicate-rows-in-postgresql/. Но оба хотят сохранить одну из строк. Я не хочу этого.

Есть ли способ?

1 Ответ

1 голос
/ 19 июня 2020

С NOT EXISTS:

select t.* from tablename t
where not exists (
  select 1 from tablename 
  where id <> t.id and color = t.color and size = t.size
);

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

select t.Id, t.color, t.size
from (
  select *, count(*) over (partition by color, size) counter
  from tablename
) t  
where t.counter = 1

Если вы хотите удалить повторяющиеся строки из таблицы, то:

delete from tablename t
where exists (
  select 1 from tablename 
  where id <> t.id and color = t.color and size = t.size
);

См. Демонстрацию . Результатов:

| id  | color | size  |
| --- | ----- | ----- |
| 3   | blue  | small |
| 4   | red   | big   |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...