質問

データベースに、削除したい重複レコードがあるテーブルがあります。このための個別のエントリを持つ新しいテーブルを作成する必要はありません。私が欲しいのは、新しいテーブルを作成せずに、既存のテーブルから重複したエントリを削除することです。これを行う方法はありますか?

 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の組み合わせで重複を明確に識別する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top