Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Οι βέλτιστες πρακτικές σχεδιασμού βάσεων δεδομένων συνιστούν τη χρήση του περιορισμού UNIQUE για την αποφυγή διπλότυπων σε μια βάση δεδομένων. Ωστόσο, όταν εργάζεστε με μια κακώς σχεδιασμένη βάση δεδομένων ή με ακάθαρτα δεδομένα, μπορεί να χρειαστεί να βρείτε μόνοι σας διπλότυπα και να τα διαγράψετε με μη αυτόματο τρόπο.

Διαβάστε παρακάτω για να μάθετε πώς μπορείτε να βρείτε διπλότυπα σε μια βάση δεδομένων SQL και πώς να τα διαγράψετε.

Δημιουργήστε ένα δείγμα βάσης δεδομένων

Για λόγους επίδειξης, δημιουργήστε έναν πίνακα με το όνομα Χρήστες με στήλη ονόματος και βαθμολογίας εκτελώντας αυτό το ερώτημα SQL.

ΠΤΩΣΗΤΡΑΠΕΖΙΑΝΥΠΑΡΧΕΙΧρήστες;

ΔΗΜΙΟΥΡΓΩΤΡΑΠΕΖΙΧρήστες (
pk_id ενθ ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ,
όνομα VARCHAR (16),
βαθμολογία INT,
);

Εισαγάγετε μερικές τιμές δείγματος εκτελώντας αυτό το ερώτημα:

ΕΙΣΑΓΕΤΕΣΕ
Χρήστες (pk_id, όνομα, βαθμολογία)
instagram viewer

ΑΞΙΕΣ
(1, 'Ιωάννα', 20),
(2, 'Γιάννης', 13),
(3, 'Αλεξ', 32),
(4, 'Γιάννης', 46),
(5, 'Ιωάννα', 20),
(6, 'Μαρία', 34),
(7, 'Ιωάννα', 20),
(8, 'Γιάννης', 13)

Σημειώστε ότι ορισμένες από αυτές τις σειρές περιέχουν διπλότυπες τιμές για τη στήλη ονόματος.

Μη διστάσετε να ελέγξετε αυτά Εντολές και ερωτήματα SQL εάν χρειάζεστε μια πιο εμπεριστατωμένη εξήγηση για τον τρόπο χειρισμού βάσεων δεδομένων χρησιμοποιώντας SQL.

Χρήση GROUP BY για την εύρεση διπλότυπων τιμών

Μπορείς χρησιμοποιήστε την πρόταση GROUP BY για να τακτοποιήσετε τιμές που πληρούν ορισμένες προϋποθέσεις στην ίδια ομάδα.

Ας υποθέσουμε ότι τα ονόματα στον πίνακα δειγμάτων πρέπει να είναι μοναδικά. Μπορείτε να χρησιμοποιήσετε το GROUP BY για να ομαδοποιήσετε τις σειρές που μοιράζονται το ίδιο όνομα.

ΕΠΙΛΕΓΩόνομα, ΜΕΤΡΩ(όνομα)
ΑΠΟ Χρήστες
ΟΜΑΔΑ ΑΝΑ ΟΝΟΜΑ
ΕΧΟΝΤΑΣ ΑΡΙΘΜΟ(όνομα) > 1

Το COUNT σάς επιτρέπει να επιλέξετε τις σειρές που έχουν περισσότερους από έναν χρήστες με το ίδιο όνομα.

Όταν εκτελείτε αυτό το ερώτημα, η βάση δεδομένων θα επιστρέψει σειρές που περιέχουν τον John και την Jane ως διπλότυπες.

Διαγραφή διπλότυπων από μια βάση δεδομένων

Αφού βρείτε τα διπλότυπα, μπορεί να θέλετε να τα διαγράψετε χρησιμοποιώντας τη δήλωση DELETE.

Για αυτό το παράδειγμα, εκτελέστε το ακόλουθο ερώτημα:

ΜΕ cte ΟΠΩΣ ΚΑΙ (
ΕΠΙΛΕΓΩ *
ROW_NUMBER() ΠΑΝΩ (
ΧΩΡΙΣΜΟΣ ΑΠΟ
όνομα, βαθμολογία
ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ
όνομα, βαθμολογία
) Ρ
ΑΠΟ
Χρήστες
)

ΔΙΑΓΡΑΦΩΑΠΟ cte
ΠΟΥ R > 1;

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

Γιατί πρέπει να διαγράψετε διπλότυπα δεδομένα

Η διαγραφή διπλών δεδομένων δεν είναι απαραίτητη. Ωστόσο, σας επιτρέπει να ελευθερώσετε το χώρο που χρησιμοποιούν οι διπλότυπες σειρές.

Λιγότερες σειρές σημαίνουν επίσης ότι τα ερωτήματα μπορούν να εκτελεστούν πολύ πιο γρήγορα οδηγώντας σε υψηλότερη απόδοση. Χρησιμοποιήστε τα ερωτήματα σε αυτό το σεμινάριο για να σας βοηθήσουν να βρείτε και να αφαιρέσετε διπλότυπα από μια βάση δεδομένων SQL.