質問
データベースに、削除したい重複レコードがあるテーブルがあります。このための個別のエントリを持つ新しいテーブルを作成する必要はありません。私が欲しいのは、新しいテーブルを作成せずに、既存のテーブルから重複したエントリを削除することです。これを行う方法はありますか?
id action
L1_name L1_data
L2_name L2_data
L3_name L3_data
L4_name L4_data
L5_name L5_data
L6_name L6_data
L7_name L7_data
L8_name L8_data
L9_name L9_data
L10_name L10_data
L11_name L11_data
L12_name L12_data
L13_name L13_data
L14_name L14_data
L15_name L15_data
これらはすべて私のフィールドです:
idはすべての行で一意です。
L11_dataは、それぞれのアクションフィールドに対して一意です。
L11_dataには会社名があり、アクションには業界名があります。
したがって、私のデータでは、それぞれの業界のL11_dataにある会社の名前が重複しています。
欲しいのは、特定の業界の企業の一意の名前とその他のデータを実行中に保存することです。皆さんが理解できる方法で私の問題を述べたことを願っています。
解決
はい、一意のIDフィールドがあると仮定すると、ID以外は同じですが、<!> quot;最小ID <!> quot;を持たないすべてのレコードを削除できます。値のグループに対して。
クエリの例:
DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)
注:
- <!> quot; Table <!> quot;を自由に選択しました。および<!> quot; ID <!> quot;代表名として
- フィールドのリスト(<!> quot; Field1、Field2、... <!> quot;)には、IDを除くすべてのフィールドが含まれている必要があります
- これはフィールドと行の数によってはクエリが遅くなる場合がありますが、他の方法と比較して問題ないことを期待しています
編集:一意のインデックスがない場合、自動インクリメントの一意のインデックスを追加することをお勧めします。主に、それが優れた設計であるだけでなく、上記のクエリを実行できるためです。
他のヒント
ALTER IGNORE TABLE 'table' ADD UNIQUE INDEX(your cols);
重複はNULLになり、削除できます
DELETE
FROM table_x a
WHERE rowid < ANY (
SELECT rowid
FROM table_x b
WHERE a.someField = b.someField
AND a.someOtherField = b.someOtherField
)
WHERE (
a.someField,
a.someOtherField
) IN (
SELECT c.someField,
c.someOtherField
FROM table_x c
GROUP BY c.someField,
c.someOtherField
HAVING count(*) > 1
)
上記のクエリでは、someFieldとsomeOtherFieldの組み合わせで重複を明確に識別する必要があります。
所属していません StackOverflow