Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 16501|Відповідь: 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 Друга умова — найменше значення ID у дублікатних записах у таблиці запитів
  • Нарешті, відповідно до двох вищезазначених умов, видалити залишкові дублікати записів, окрім найменшого ID у дубльованому записі


Але, на жаль, при запуску цього оператора виникає помилка, що приблизно означає, що таблицю не можна оновити одночасно з запитом.


Код розв'язано

Виходячи з наведеного вище SQL-твердження, я думаю, що ви можете досягти цієї мети за два кроки через код:

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


У мене з'явилася ідея, і я швидко її написав, але був шокований, коли опублікував її, а вона мені справді була потрібна116ліворуч і праворуч, а потім я хочу знайти SQL-оператор, який можна використати, вставити код і результат, що працює:




Ідеальний [дедуплікація і залиш один] SQL

Нарешті, я отримав ідеальну відповідь у технічній групі, подивіться на цей sql-вислов:


Вищенаведене sql-твердження, якщо придивитися уважно, зрозуміти ідею неважко, і, ймовірно, воно поділене на 3 етапи для розуміння:

  • (ВИБРАТИ min(id) id, user_id, монетарний consume_time З consum_record ГРУПИ ЗА user_id, монетарний, consume_time НАЯВНІСТЬ 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 секунд, дивовижно~







Попередній:Відеоматеріал жовтня 2018 року на javaEE
Наступний:SQL випадково змінює оновлені дані
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com