Kā atrast un dzēst dublikātus SQL

Kā atrast un dzēst dublikātus SQL
Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Datu bāzes projektēšanas paraugprakse iesaka izmantot UNIQUE ierobežojumu, lai novērstu dublikātus datu bāzē. Tomēr, strādājot ar slikti izstrādātu datu bāzi vai netīriem datiem, iespējams, jums pašam būs jāatrod dublikāti un tie jāizdzēš manuāli.





Lasiet tālāk, lai uzzinātu, kā atrast dublikātus SQL datu bāzē un kā tos dzēst.





Izveidojiet paraugu datu bāzi

Demonstrācijas nolūkos izveidojiet tabulu ar nosaukumu Lietotāji ar nosaukumu un rezultātu kolonnu, izpildot šo SQL vaicājumu.





kā kļūt slavenam vietnē tiktok
 DROP TABLE IF EXISTS Users; 

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

Ievietojiet dažus vērtību paraugus, izpildot šo vaicājumu:

 INSERT INTO 
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

Ņemiet vērā, ka dažās no šīm rindām ir dublētas nosaukuma kolonnas vērtības.



Jūtieties brīvi pārbaudīt šos SQL komandas un vaicājumi ja jums ir nepieciešams padziļināts skaidrojums par to, kā manipulēt ar datu bāzēm, izmantojot SQL.

GROUP BY izmantošana, lai atrastu dublētās vērtības

Jūs varat izmantojiet priekšrakstu GROUP BY, lai sakārtotu vērtības kas atbilst noteiktiem nosacījumiem tajā pašā grupā.





Pieņemsim, ka nosaukumiem parauga tabulā ir jābūt unikāliem. Varat izmantot GROUP BY, lai grupētu rindas ar vienādu nosaukumu.

pārraidīt vlc uz Chromecast Windows 10
 SELECT name, COUNT(name) 
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

Izmantojot opciju COUNT, varat atlasīt rindas, kurās ir vairāk nekā viens lietotājs ar vienādu vārdu.





Palaižot šo vaicājumu, datu bāze kā dublikātus atgriezīs rindas, kurās būs Džons un Džeina.

Dublikātu dzēšana no datu bāzes

Pēc dublikātu atrašanas, iespējams, vēlēsities tos dzēst, izmantojot priekšrakstu DELETE.

Šajā piemērā palaidiet šādu vaicājumu:

 WITH cte AS ( 
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE R > 1;

Šis vaicājums izmanto CTE izteiksmi, lai atrastu dublikātus, un pēc tam dzēš tos visus, izņemot vienu.

Kāpēc jums vajadzētu dzēst dublētos datus

Dublētu datu dzēšana nav obligāta. Tomēr tas ļauj atbrīvot vietu, ko izmanto dublētās rindas.

Mazāk rindu arī nozīmē, ka vaicājumus var izpildīt daudz ātrāk, tādējādi nodrošinot augstāku veiktspēju. Izmantojiet šīs apmācības vaicājumus, lai palīdzētu atrast un noņemt dublikātus no SQL datu bāzes.