Как удалить или удалить дубликаты записей из MySQL 5.0 - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу очистить свою базу данных от особых пользовательских событий. Я должен очистить базы данных в таблице, если идентификаторы PID и UID совпадают. На моем сервере установлен MySQL 5.x, поэтому аналитические функции CET / Over () не работают.

Любая помощь высоко ценится.

Table 

ID  PID  UID
1    1    1
2    1    1
3    1    1
4    1    1
5    3    2
6    2    5

Желаемая таблица после очистки

ID  PID  UID
1    1    1
5    3    2
6    2    5

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Вы можете использовать delete с join.Если вы хотите сохранить одну строку для всех дублирующих пар:

delete t
    from t join
         (select pid, uid, min(id) as min_id, count(*) as cnt
          from t
          group by pid, uid
         ) tt
         on tt.pid = t.pid and t.uid = tt.uid
    where t.id <> tt.min_id;

Если вы хотите удалить все дубликаты, измените where на:

   where cnt >= 2
1 голос
/ 15 апреля 2019

С самостоятельным присоединением:

delete t 
from tablename t inner join tablename tt
on tt.pid = t.pid and tt.uid = t.uid 
where tt.id < t.id 

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

| id  | pid | uid |
| --- | --- | --- |
| 1   | 1   | 1   |
| 5   | 3   | 2   |
| 6   | 2   | 5   |
1 голос
/ 15 апреля 2019

попробуйте, как показано ниже

DELETE n1 FROM table n1 join
table n2 on n1.id > n2.id AND n1.PID = n2.PID and n1.UID=n2.UID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...