sql >> Databasteknik >  >> RDS >> Mysql

ta bort dubbletter i tabellen

Ett sätt att göra detta är att gå med i tabellen på en underfråga med LEFT JOIN . Underfrågan får det lägsta ID för varje UID . När en post inte har matchning på underfrågan, betyder det bara att den inte har någon matchande post och kan säkert raderas.

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID
            FROM    TableName
            GROUP   BY uid
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID
WHERE   b.uid IS NULL

Men om posterna för UID kan ha ett annat namn, då måste du inkludera namegroup by klausul eller annars bara unik uid med det lägsta ID kommer att finnas kvar.

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID, name
            FROM    TableName
            GROUP   BY uid, name
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID AND
                a.name = b.name
WHERE   b.uid IS NULL


  1. Hur man konverterar en Windows-1251 (rysk kyrillisk) MySql-databas till UTF-8

  2. MigrationSchemaMissing(Kan inte skapa tabellen django_migrations (%s) % exc)

  3. Hur kan man få unika värden från datatabellen med hjälp av dql?

  4. Hur man använder Case Statement för villkorlig formatering i Select Query - SQL Server / TSQL självstudie del 116