Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 15984|Odpowiedź: 0

[Źródło] MySQL [usuń redundancję i pozostawij jedną] Instrukcja sql uzupełnia podsumowanie pomysłu

[Skopiuj link]
Opublikowano 13.03.2019 13:37:42 | | | |
Kilka dni temu, gdy robiłem wymagania, musiałem wyczyścić zduplikowane rekordy w mysql, a wtedy chodziło o napisanie tego przez code traversal, a potem uznałem, że to zbyt skomplikowane, myśląc, że problem powinienem rozwiązać za pomocą instrukcji sql. Po sprawdzeniu informacji i konsultacji z szefem opracowałem bardzo wygodne sformułowanie sql, a tutaj podzielę się tym stwierdzeniem i pomysłami.

Analiza potrzeb
Jeśli w bazie danych występują duplikaty, usuń i zachowaj jeden z nich (niezależnie od tego, czy kryteria określania ich to wiele pól)


rozwiązanie

Kiedy napotkasz tę potrzebę, prawdopodobnie masz w sercu jakiś pomysł. Najszybciej, co wymyśliłem, to że mógłbym rozwiązać to za pomocą instrukcji sql, ale byłem zbyt płytki w złożonych instrukcjach sql, więc chciałem poprosić szefa o pomoc.

Znajdź kogoś, kto pomoże

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

Own Baidu

Znalazłem wyrażenie sql:


Ten pomysł SQL jest oczywisty, są następujące 3 kroki:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Zapytaj duplikowane rekordy w tabeli jako warunek
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Drugi warunek to najmniejsza wartość ID w zduplikowanych rekordach w tabeli zapytań
  • Na koniec, zgodnie z powyższymi dwoma warunkami, usuń pozostałe zduplikowane rekordy z wyjątkiem najmniejszego identyfikatora w rekordzie duplikatycznym


Niestety, wystąpił błąd w uruchamianiu tego stwierdzenia, co mniej więcej oznacza, że tabela nie może być aktualizowana jednocześnie z zapytaniem.


Kod rozwiązany

Na podstawie powyższego stwierdzenia SQL myślę, że możesz osiągnąć ten sam cel w dwóch krokach za pomocą kodu:

  • Najpierw usuwane są duplikaty zbiorów danych
  • Na podstawie zapytania, pozostałe duplikaty są usuwane w pętli


Miałem pomysł i napisałem go szybko, ale byłem w szoku, gdy go uruchomiłem, a naprawdę go potrzebowałem116lewo i prawo, a potem chcę znaleźć polecenie SQL, którego mogę użyć, wkleić kod i wynik uruchomiony:




Idealny [deduplikacja i zostawienie jednego] SQL

Na koniec otrzymałem idealną odpowiedź w grupie technicznej, spójrz na to stwierdzenie sql:


Powyższe stwierdzenie o sql, jeśli przyjrzeć się uważnie, nie jest trudno zrozumieć ideę i prawdopodobnie jest podzielona na 3 kroki, aby zrozumieć:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Zapytaj zduplikowane rekordy, aby utworzyć kolekcję (tymczasowa tabela t2), która zawiera minimalny identyfikator każdego duplikowanego rekordu
  • consum_record.user_id = t2.user_id oraz consum_record.monetary = t2.monetary oraz consum_record.consume_time = t2.consume_time Pola powiązane dla zduplikowanych kryteriów
  • Usuwanie rekordów z ID większymi niż ID w T2 zgodnie z warunkami


Kiedy zobaczyłem to zdanie, pomyślałem, że to zbyt potężne. Tak proste sformułowanie sql może rozwiązać tak złożony problem, a postawa rośnie~
Jest też bardzo szybki w uruchomieniu, oryginalne wykonanie pętli kodu zajmuje około 116 sekund, ale tutaj wystarczy 0,3 sekundy, niesamowite~







Poprzedni:javaEE materiał wideo z października 2018
Następny:SQL losowo modyfikuje zaktualizowane dane
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com