sql >> データベース >  >> RDS >> Mysql

結合を使用してテーブルから重複する行を削除します

    同じstate_idを持つ重複する都市を削除する場合 (重複レコード)、cityでグループ化することでそれを行うことができます およびstate_id MINを使用します またはMAX 機能:

    クエリを削除する前は、テーブルは次のようになっていました

    | 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 |
    

    次のクエリを使用して、重複するレコードを削除できます。

    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;
    

    上記のクエリを適用すると、テーブルは次のようになります。

    | 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 |
    

    このSQLFiddleを参照

    詳細については、 DELETEを参照してください。 MySQLの構文。



    1. TransactSQLでNOTEXISTSではなくEXCEPTを使用する場合

    2. wwv_flow_filesを使用したOracleApexへのファイルのインポート

    3. SQL Server 2008を使用してテーブルから上位1000行を削除するにはどうすればよいですか?

    4. uniqueidentifier列を追加し、デフォルトを追加して新しいGUIDを生成します