нужна помощь в удалении повторяющихся столбцов из таблицы - PullRequest
0 голосов
/ 13 апреля 2020

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

| sr_no | id | content |
|  1    |200 |   abc   |
|  2    |201 |   xyz   |
|  3    |202 |   aaa   |
|  4    |200 |   bbb   |
|  5    |300 |   ccc   |
|  6    |202 |   ddd   |

, где sr_no - первичный ключ. Теперь я хочу удалить один из строки с таким же идентификатором, чтобы вывод был

| sr_no | id | content |
|  1    |200 |   abc   |
|  2    |201 |   xyz   |
|  3    |202 |   aaa   |
|  5    |300 |   ccc   |

со всеми уникальными значениями в столбце id

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Таким образом, у этой проблемы есть больше решений, которые зависят от разных условий;)

В одном из них вы можете создать новую таблицу дублирования, основанную на различных данных исходной таблицы, после удаления исходной таблицы -> после переименования дубликата в оригинал ...

так что, но исходя из этого вопроса, просто

попробуйте это:

  delete t1 FROM sample t1 
  INNER  JOIN sample t2 
     WHERE
       t1.sr_no < t2.sr_no AND
       t1.id = t2.id
0 голосов
/ 13 апреля 2020

Этот подзапрос возвращает все мин sr_no с для каждого id, и это строки, которые вы хотите сохранить:

select min(sr_no) sr_no 
from tablename 
group by id

Таким образом, вы можете удалить все остальные sr_no с:

delete from tablename
where sr_no not in (
  select sr_no from (
    select min(sr_no) sr_no 
    from tablename 
    group by id
  ) t
);

См. Демоверсию . Или с самостоятельным присоединением:

delete t1 
from tablename t1 inner join tablename t2
on t2.id = t1.id and t2.sr_no < t1.sr_no;

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

| sr_no | id  | content |
| ----- | --- | ------- |
| 1     | 200 | abc     |
| 2     | 201 | xyz     |
| 3     | 202 | aaa     |
| 5     | 300 | ccc     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...