Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 15984|Отговор: 0

[Източник] MySQL [премахнете излишък и оставете едно] SQL оператор допълва обобщението на идеята

[Копирай линк]
Публикувано в 13.03.2019 г. 13:37:42 ч. | | | |
Преди няколко дни, когато правех изискване, трябваше да почистя дублиращите се записи в mysql, и тогава идеята беше да го напиша чрез code traversal, но тогава реших, че е твърде сложно, мислейки, че трябва да мога да реша проблема с 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 Второто условие е най-малката стойност на ID-то в дублиращите се записи в таблицата за заявки
  • Накрая, според горните две условия, изтрийте останалите дублиращи се записи, с изключение на най-малкия ID в дублиращия се запис


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


Кодът е решен

Въз основа на горното SQL твърдение мисля, че може да успеете да постигнете същата цел в две стъпки чрез код:

  • Първо се премахват дублирани набори от данни
  • Въз основа на търсения набор от данни, останалите дубликати се премахват в цикъл


Имах идея и я написах бързо, но бях шокиран, когато я публикувах, а всъщност ми беше нужна116sляво и надясно, след което искам да намеря SQL оператор, който мога да използвам, да поставя кода и работещия резултат:




Перфектен [дедупликация и остави едно] SQL

Накрая получих перфектен отговор в техническа група, вижте това SQL твърдение:


Горното SQL твърдение, ако се вгледате внимателно, не е трудно да се разбере идеята и вероятно е разделено на 3 стъпки за разбиране:

  • (SELECT min(id) id, user_id, монетичен consume_time ОТ consum_record ГРУПА ПО user_id, монетарна consume_time HAVING count(*) > 1 ) t2 Запитване към дублиращите се записи, за да се формира колекция (временна таблица t2), която съдържа минималния ID на всеки дублиран запис
  • 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 секунди са достатъчни, невероятно~







Предишен:javaEE видео материал от октомври 2018
Следващ:SQL произволно модифицира актуализираните данни
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com