удалить повторяющиеся строки из таблицы с учетом определенных критериев в mysql 5.7 - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть таблица с именем books, с такими строками, как:

+----+----------+---------+--------+-----------+
Id    PNo        Gid      Genre    Trailer
+----+----------+---------+--------+------------+
1     1234567      55        NULL      NULL
2     1234567      64        Fiction   NULL
3     8763525      64        Fiction   NULL
4     8763525      73        Fiction   NULL
5     5555555      18        Fiction   NULL
6     5555555      64        Fiction   NULL
+---------------------------------------------------

Что мне нужно сделать, это следующее: я хочу удалить все строки с дублирующимися данными на основе столбца PNo и где значение Gid = 64, а также Pno не равно 5555555

Следующий запрос возвращает мне нужные мне результаты (повторяющиеся строки), но мне нужно знать, как можно сделать удаление также на основе по вышеуказанным критериям:

SELECT
  COUNT(*) as repetitions,
  group_concat(PNo, ' (', Gid, ', ', Genre, ') ' SEPARATOR ' | ')
    as row_data
FROM books
GROUP BY PNo
HAVING repetitions > 1;

DELETE m1 FROM books m1
INNER JOIN books m2 
ON m1.PNo = m2.PNo
WHERE m1.PNo = '64' AND m1.PNo != 5555555

Приведенное выше удалит все строки, имеющие m1.PNo = '64', когда мне нужно будет удалить только повторяющиеся строки, основываясь на значении столбца PNo , который также имеет в столбце Gid значение 64. Каким должен быть мой запрос на удаление?

1 Ответ

1 голос
/ 11 февраля 2020

Вы почти у цели: вам просто нужно условие, позволяющее избежать объединения записи с самим собой. Предполагая, что id является первичным ключом вашей таблицы (или, по крайней мере, уникальным ключом), вы можете сделать:

delete m1 
from books m1
inner join books m2 on m1.pno = m2.pno and m1.id <> m2.id
where m1.gid = 64 and m1.pno != 5555555

Примечание: я думаю, что в предложении where есть сбой, где m1.PNo = '64' должно быть m1.gid = 64 (также, если gid имеет числовой c тип данных, вы не должны заключать значение в кавычки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...