sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter av rader från tabellen med join

Om du vill ta bort duplicerad stad med samma state_id (dubbletter av poster), du kan göra det genom att gruppera dem efter city och state_id och med MIN eller MAX funktion:

Före raderingsfrågan såg din tabell ut som

| ID | STATE_ID |       CITY |
------------------------------
|  1 |        1 |   city_one |
|  2 |        1 |   city_two |
|  3 |        1 |   city_one |
|  4 |        1 |   city_two |
|  5 |        2 |   city_one |
|  6 |        3 | city_three |
|  7 |        3 |   city_one |
|  8 |        3 | city_three |
|  9 |        4 |  city_four |
| 10 |        4 |  city_five |

Du kan använda följande fråga för att ta bort dubbletter av poster:

DELETE city_table 
  FROM city_table
  LEFT JOIN 
  (SELECT MIN(id) AS IDs FROM city_table
   GROUP BY city,state_id
  )A
  ON city_table.ID = A.IDs
  WHERE A.ids IS NULL;

Efter att ha tillämpat ovanstående fråga kommer din tabell att se ut så här:

| ID | STATE_ID |       CITY |
------------------------------
|  1 |        1 |   city_one |
|  2 |        1 |   city_two |
|  5 |        2 |   city_one |
|  6 |        3 | city_three |
|  7 |        3 |   city_one |
|  9 |        4 |  city_four |
| 10 |        4 |  city_five |

Se denna SQLFiddle

För mer se DELETE Syntax för MySQL.



  1. MAX() vs GREATEST() i MySQL:Vad är skillnaden?

  2. ODBC-fråga på MS SQL Server returnerar endast de första 255 tecknen i PHP PDO (FreeTDS)

  3. 2 sätt att ta reda på vilket kvartal en dejt tillhör i MariaDB

  4. Hur genererar jag ett slumptal för varje rad i ett T-SQL-val?