Hur man hittar och tar bort dubbletter i SQL

Hur man hittar och tar bort dubbletter i SQL
Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Bästa metoder för databasdesign rekommenderar att du använder begränsningen UNIQUE för att förhindra dubbletter i en databas. Men när du arbetar med en dåligt utformad databas eller oren data kan du behöva hitta dubbletter själv och radera dem manuellt.





Läs vidare för att lära dig hur du hittar dubbletter i en SQL-databas och hur du tar bort dem.





wifi har ingen giltig ip -adress

Skapa en exempeldatabas

För demonstrationsändamål, skapa en tabell med namnet Användare med en namn- och poängkolumn genom att köra den här SQL-frågan.





 DROP TABLE IF EXISTS Users; 

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

Infoga några exempelvärden genom att köra den här frågan:

 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)

Observera att vissa av dessa rader innehåller dubbletter av värden för namnkolumnen.



Kolla gärna in dessa SQL-kommandon och frågor om du behöver en mer djupgående förklaring av hur man manipulerar databaser med SQL.

Använd GROUP BY för att hitta dubbletter av värden

Du kan använd GROUP BY-satsen för att ordna värden som uppfyller vissa villkor i samma grupp.





Låt oss säga att namnen i exempeltabellen måste vara unika. Du kan använda GROUP BY för att gruppera raderna med samma namn.

windows 10 home vs pro vs enterprise
 SELECT name, COUNT(name) 
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

COUNT låter dig välja de rader som har mer än en användare med samma namn.





När du kör den här frågan kommer databasen att returnera rader som innehåller John och Jane som dubbletter.

Ta bort dubbletter från en databas

När du har hittat dubbletterna kanske du vill ta bort dem med DELETE-satsen.

För det här exemplet, kör följande fråga:

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

DELETE FROM cte
WHERE R > 1;

Den här frågan använder ett CTE-uttryck för att hitta dubbletterna och tar sedan bort alla utom en.

Varför du bör ta bort dubbletter av data

Att ta bort dubbletter av data är inte ett måste. Det låter dig dock frigöra utrymme som dubbletter av rader använder.

Färre rader innebär också att frågor kan köras mycket snabbare vilket leder till högre prestanda. Använd frågorna i den här handledningen för att hjälpa dig hitta och ta bort dubbletter från en SQL-databas.