Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 15984|Ответ: 0

[Источник] MySQL [удалить избыточность и оставить один] Sql-оператор завершает краткое изложение идеи

[Скопировать ссылку]
Опубликовано 13.03.2019 13:37:42 | | | |
Несколько дней назад, когда я выполнял требование, мне нужно было убрать дублирующиеся записи в mysql, и тогда идея заключалась в том, чтобы написать это через перемещение кода, но потом я подумал, что это слишком сложно, думая, что смогу решить проблему с помощью SQL-оператора. Проверив информацию и проконсультировавшись с начальником, я придумал очень удобное SQL-сообщение, и здесь я поделюсь этим sql-заявлением и идеями.

Анализ потребностей
Если в базе данных есть дублирующие записи, удалите и оставьте одну из них (независимо от того, являются ли критерии определения дублирующих полей несколькими полями)


решение

Когда вы сталкиваетесь с этой потребностью, у вас, вероятно, есть идея в сердце. Самое быстрое, что я придумал — это решение с помощью SQL-оператора, но я был слишком поверхностен в сложных SQL-операторах, поэтому хотел попросить помощи у начальника.

Найдите кого-то, кто поможет

因为这个需求有点着急,所以最开始想到的是,可以找这方面的同行来解决,然后分享这个问题给@赵七七同学,结果这货随便百度了一下,就甩给我一个从未用过的sql语句,让我自己尝试,心里万匹那啥啥啥奔腾而过...

Own Baidu

Нашёл SQL-оператор:


Идея SQL очевидна, есть следующие 3 шага:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Запросить дублирующиеся записи в таблице как условие
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Второе условие — наименьшее значение идентификатора в дублирующихся записях таблицы запросов
  • Наконец, согласно двум вышеуказанным условиям, удалять оставшиеся дублирующиеся записи, кроме самого маленького идентификатора в дублирующей записи


Но, к сожалению, при запуске этого оператора возникает ошибка, что примерно означает, что таблицу нельзя обновить одновременно с запросом.


Код решен

Исходя из вышеуказанного SQL-утверждения, я думаю, что вы можете достичь той же цели за два шага с помощью кода:

  • Сначала удаляются дублирующиеся наборы данных
  • На основе запрошенного набора данных оставшиеся дубликаты удаляются по циклу


У меня была идея, я быстро её написал, но был шокирован, когда её опубликовал, а она мне действительно была нужна116-еслева и справа, а затем я хочу найти SQL-оператор, который можно использовать, вставить код и запуск результата:




Идеальный [дедупликация и оставление одного] SQL

Наконец, я получил идеальный ответ в технической группе, посмотрите на это утверждение в SQL:


Приведённое выше SQL-утверждение, если присмотреться, понять идею несложно, и, вероятно, оно делится на 3 этапа для понимания:

  • (SELECT min(id) id, user_id, monetary, consume_time ИЗ consum_record ГРУППЫ ПО user_id, монетарному consume_time HAVING count(*) > 1 ) t2 Запросить дублирующиеся записи для формирования коллекции (временной таблицы t2), содержащей минимальный идентификатор каждой дублирующей записи
  • consum_record.user_id = t2.user_id и consum_record.monetary = t2.monetary и consum_record.consume_time = t2.consume_time Ассоциированные поля для дублирующих критериев
  • Удалять записи с ID выше ID в T2 в соответствии с условиями


Когда я увидел это предложение, подумал, что оно слишком сильное. Такое простое sql-утверждение может решить такую сложную задачу, и позиция расти~
Он также очень быстрый в запуске, оригинальный цикл кода занимает около 116 секунд, но здесь 0,3 секунды достаточно, потрясающе~







Предыдущий:Видеоматериалы за октябрь 2018 года в javaEE
Следующий:SQL случайным образом изменяет обновлённые данные
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com