0

大規模な古いテーブル (数十万行) に UNIQUE キーを作成して、各行に一意のデータが含まれるようにします。ただし、テーブルには既にいくつかの重複が含まれているため、インデックスを作成して作成することはできません。含まれている複製の数、または複製が必要かどうかはわかりません。要するに、将来の UNIQUE キーに違反するすべての行を選択するクエリを考え出す前に、問題を分析することはできません。

フィールドcol_onecol_twocol_threecol_fourを持つテーブルがあるとします。私の将来の UNIQUE キーには、col_twocol_threeが含まれます。同じテーブルでcol_twocol_threeが重複しているテーブルのすべての行を選択するにはどうすればよいですか?

4

1 に答える 1

4

グループを使用します。

SELECT 
  col_two,
  col_three,
  COUNT (*) AS `num_dupes`
FROM
  your_table
GROUP BY
  col_two,
  col_three
HAVING 
  COUNT(*) > 1 -- Only return results where there is at least one duplicate.

重複が存在するテーブルからすべての結果を表示したい場合は、これらの結果をテーブルに結合できます。

SELECT
  your_table.*
FROM
  your_table
    INNER JOIN 
    (SELECT 
      col_two,
      col_three,
      COUNT (*) AS `num_dupes`
    FROM
      your_table
    GROUP BY
      col_two,
      col_three
    HAVING 
      COUNT(*) > 1) dupes 
      ON your_table.col_two = dupes.col_two AND
         your_table.col_three = dupes.col_three
于 2013-03-18T08:32:41.180 に答える