Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 15984|Απάντηση: 0

[Πηγή] MySQL [αφαιρέστε τον πλεονασμό και αφήστε έναν] Μια δήλωση sql ολοκληρώνει τη σύνοψη της ιδέας

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/3/2019 1:37:42 μ.μ. | | | |
Πριν από λίγες μέρες, όταν έκανα μια απαίτηση, έπρεπε να καθαρίσω τις διπλότυπες εγγραφές στη mysql, και η ιδέα εκείνη τη στιγμή ήταν να το γράψω μέσω διέλευσης κώδικα, και μετά σκέφτηκα ότι ήταν πολύ περίπλοκο, σκεπτόμενος ότι θα έπρεπε να είμαι σε θέση να λύσω το πρόβλημα με μια δήλωση sql. Αφού έλεγξα τις πληροφορίες και συμβουλεύτηκα το αφεντικό, κατέληξα σε μια πολύ βολική δήλωση sql και εδώ θα μοιραστώ αυτήν τη δήλωση sql και ιδέες.

Ανάλυση αναγκών
Εάν υπάρχουν διπλότυπες εγγραφές στη βάση δεδομένων, διαγράψτε και διατηρήστε μία από αυτές (εάν τα κριτήρια για τον προσδιορισμό των διπλότυπων πεδίων είναι πολλαπλά πεδία)


λύση

Όταν αντιμετωπίζετε αυτή την ανάγκη, πιθανότατα έχετε μια ιδέα στην καρδιά σας. Το πιο γρήγορο πράγμα που σκέφτηκα ήταν ότι θα μπορούσα να το λύσω με μια δήλωση sql, αλλά ήμουν πολύ ρηχός σε σύνθετες εντολές sql, οπότε ήθελα να ζητήσω βοήθεια από το αφεντικό.

Βρείτε κάποιον να σας βοηθήσει

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

Διαθέτετε 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, νομισματικό, consume_time FROM consum_record GROUP BY 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 Συσχέτιση πεδίων για τα διπλότυπα κριτήρια
  • Διαγραφή εγγραφών με αναγνωριστικά μεγαλύτερα από αναγνωριστικά στο T2 σύμφωνα με τις συνθήκες


Όταν είδα αυτήν την πρόταση, σκέφτηκα ότι ήταν πολύ ισχυρή. Μια τόσο απλή δήλωση sql μπορεί να λύσει ένα τόσο περίπλοκο πρόβλημα και η στάση του σώματος ανεβαίνει~
Είναι επίσης εξαιρετικά γρήγορο στην εκτέλεση, η αρχική εκτέλεση βρόχου κώδικα διαρκεί περίπου 116 δευτερόλεπτα, αλλά εδώ 0.3 δευτερόλεπτα είναι αρκετά, καταπληκτικά~







Προηγούμενος:javaEE Οκτώβριος 2018 βίντεο
Επόμενος:Η SQL τροποποιεί τυχαία τα ενημερωμένα δεδομένα
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com