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

MySQLの1つを除くすべての重複行を削除しますか?

    編集者の警告:このソリューションは計算効率が悪く、大きなテーブルの接続がダウンする可能性があります。

    NB-必要 テストコピーで最初にこれを行う あなたのテーブルの!

    それを行ったとき、AND n1.id <> n2.idも含めない限り 、テーブル内のすべての行を削除しました。

    1. idが最も小さい行を保持する場合 値:

      DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
      
    2. idが最も高い行を保持する場合 値:

      DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
      

    MySQL5.1でこの方法を使用しました

    他のバージョンについてはよくわかりません。

    更新:重複を削除するためにグーグルする人々はここに行き着くので
    OPの質問はDELETEに関するものですが 、INSERTを使用することをお勧めします およびDISTINCT はるかに高速です。 800万行のデータベースの場合、DELETEを使用している間、以下のクエリには13分かかりました。 、2時間以上かかりましたが、完了しませんでした。

    INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
        SELECT DISTINCT cellId,attributeId,entityRowId,value
        FROM tableName;
    



    1. C#からOracleストアドプロシージャを呼び出しますか?

    2. コマンドラインを介してLinux上のMySQLユーザーに権限を付与する

    3. 私の11gオプティマイザー統計ジョブが終了しました–修正済み

    4. PHPでMySQLテーブルの最後に挿入されたIDを取得するにはどうすればよいですか?