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

2つの列に基づいて重複を削除し、別の列の最小値を持つ行を保持します

    このクエリを使用して、重複するすべてのエントリを削除し、最初のエントリを残すことができます:

    DELETE d
    FROM discog d
    JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
    

    更新

    非常に大きなテーブルに対してより効率的であるはずの代替ソリューションは、重複挿入を防ぐために行にUNIQUEインデックスを使用してコピーを作成することです。

    CREATE TABLE discog_copy (id INT, artist VARCHAR(50), track VARCHAR(50), year INT);
    ALTER TABLE discog_copy ADD UNIQUE KEY (artist, track);
    INSERT IGNORE INTO discog_copy SELECT * FROM discog ORDER BY year;
    

    一意のキーは組み合わせにあります アーティスト名とトラック名の違いにより、アーティストは異なるトラックを持ち、異なるアーティストは同じトラック名を持つことができます。 SELECT クエリの一部にORDER BYがあります 年、それは最初に最も低い年との(artist、track、year)の組み合わせを挿入し、次に他の同一の(artist、track)レコードは重複したキーのために挿入されません。

    レキスターのデモ




    1. TalendでMysqlinputのスキーマをオンザフライで推測する方法

    2. nullも許可する一意の制約を作成するにはどうすればよいですか?

    3. アソシエーションテーブルの正しい名前は何ですか(多対多の関係)

    4. データマイニングの概要