Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 15984|Antwort: 0

[Quelle] MySQL [Redundanz entfernen und eine übrig lassen] Eine SQL-Anweisung vervollständigt die Ideenzusammenfassung

[Link kopieren]
Veröffentlicht am 13.03.2019 13:37:42 | | | |
Vor ein paar Tagen, als ich eine Anforderung gemacht habe, musste ich die doppelten Datensätze in MySQL bereinigen, und damals war die Idee, sie durch Codedurchlauf zu schreiben, und dann dachte ich, es sei zu kompliziert, weil ich dachte, ich könnte das Problem mit einer SQL-Anweisung lösen. Nachdem ich die Informationen überprüft und den Chef konsultiert habe, habe ich eine sehr praktische SQL-Anweisung entwickelt, und hier werde ich diese SQL-Ausweisung und Ideen teilen.

Bedarfsanalyse
Wenn es doppelte Datensätze in der Datenbank gibt, lösche und behalte einen davon (unabhängig davon, ob die Kriterien zur Bestimmung doppelter Felder mehrere Felder sind)


Lösung

Wenn Sie diesem Bedürfnis begegnen, haben Sie wahrscheinlich eine Idee im Herzen. Das Schnellste, was mir eingefallen ist, war, dass ich es mit einer SQL-Anweisung lösen könnte, aber ich war zu oberflächlich in komplexen SQL-Anweisungen, also wollte ich den Chef um Hilfe bitten.

Finde jemanden, der dir hilft.

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

Eigenes Baidu

Ich habe eine SQL-Anweisung gefunden:


Diese SQL-Idee ist offensichtlich, es gibt die folgenden drei Schritte:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Abfrage von doppelten Datensätzen in der Tabelle als Bedingung
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Die zweite Bedingung ist der kleinste Wert der ID in den doppelten Datensätzen in der Abfragetabelle
  • Schließlich löschen Sie gemäß den beiden obigen Bedingungen die verbleibenden doppelten Datensätze, mit Ausnahme der kleinsten ID im doppelten Datensatz


Leider gibt es jedoch einen Fehler bei der Ausführung dieser Anweisung, was ungefähr bedeutet, dass die Tabelle nicht gleichzeitig mit der Abfrage aktualisiert werden kann.


Code gelöst

Basierend auf der obigen SQL-Anweisung denke ich, dass du dasselbe Ziel in zwei Schritten durch Code erreichen kannst:

  • Zuerst werden doppelte Datensätze entnommen
  • Basierend auf dem abgefragten Datensatz werden die verbleibenden Duplikate in einer Schleife entfernt


Ich hatte eine Idee und schrieb sie schnell, aber ich war schockiert, als ich sie veröffentlichte, und ich brauchte sie tatsächlich116erlinks und rechts, und dann möchte ich eine SQL-Anweisung finden, die ich verwenden kann, den Code und das laufende Ergebnis einfügen:




Perfekte [Deduplizierung und lassen eine] SQL

Schließlich habe ich in einer technischen Gruppe eine perfekte Antwort bekommen, schau dir diese SQL-Aussage an:


Die oben genannte SQL-Aussage ist bei genauerem Hinsehen nicht schwer, die Idee zu verstehen, und sie ist wahrscheinlich in drei Schritte unterteilt, um sie zu verstehen:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1) t2 Abfrage der doppelten Datensätze, um eine Sammlung (temporäre Tabelle t2) zu bilden, die die minimale ID jedes doppelten Datensatzes enthält
  • consum_record.user_id = t2.user_id und consum_record.monetary = t2.monetary und consum_record.consume_time = t2.consume_time assoziierte Felder für die doppelten Kriterien
  • Lösche Datensätze mit IDs größer als IDs in T2 gemäß den Bedingungen


Als ich diesen Satz sah, dachte ich mir, dass das zu kraftvoll ist. Eine so einfache SQL-Anweisung kann ein so komplexes Problem lösen, und die Haltung steigt~
Es ist außerdem super schnell zu laufen, die ursprüngliche Code-Schleife dauert etwa 116 Sekunden, aber hier reichen 0,3 Sekunden, erstaunlich~







Vorhergehend:javaEE Oktober 2018 Videomaterial
Nächster:SQL verändert die aktualisierten Daten zufällig
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com