#mysql
#mysql
Вопрос:
Как удалить дубликаты записей из базы данных без использования distinct
, group by
Id. Name age dob
1. b. 11. 1992
2. d. 14. 1967
3. b. 11. 1992
Комментарии:
1. В случае строк с идентификаторами 1 и 3 есть ли какие-либо предпочтения относительно того, какая строка должна быть сохранена, а какая строка должна быть удалена?
2. какую версию mysql вы используете? P.S. Такого рода вопросы задают часто … вы проводили какие-либо исследования?
3. Повторяющиеся записи на основе
Name
,age
иdob
?4. @Arulkumar дублирующие записи на основе имени
5. MySQL 5.6.16 @ADyson
Ответ №1:
Вы можете попробовать это: Предположим, test — это имя вашей таблицы :-
delete th
from test as th
where th.id IN (select id
from (select a.id
from test as a
left join test as b
on a.name = b.name where a.id>b.id) AS T);
Ответ №2:
Как вы упомянули, дублирование записи на основе Name
, используя ROW_NUMBER()
, вы можете обойтись без DISTINCT
и GROUP BY
.
Запрос будет:
DELETE FROM (
SELECT Id, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Id) AS RN
FROM Table
) AS Q
WHERE RN = 1
Комментарии:
1. Мы не можем использовать order by, group by и distinct
2. @VibrateTasks почему бы и нет? Это какой-то экзаменационный вопрос с произвольными бессмысленными ограничениями?
3. @ADyson brother в соответствии с условием, я не могу использовать group by, order by и distinct
4. Условие @VibrateTasks для чего ? Это была моя точка зрения. Это ваше домашнее задание? Если это так, то я бы надеялся, что вы сначала провели немного больше собственных исследований, чтобы облегчить свое обучение, иначе простое кормление вас ответом с ложечки на самом деле не поможет вам многому научиться. Ваш вопрос предполагает полное отсутствие усилий в этом отношении. Также в исходном вопросе вы не упомянули, что ORDER BY был запрещен, так что этот ответ совершенно законен с этой точки зрения. Не меняйте условия по ходу работы, проясните это с самого начала
5. @ADyson да, это мой вопрос для интервью.