1

私はWeb開発者なので、大量のデータを操作する知識が不足しています。

同僚がデータの問題の解決策を探しています。会社名がリストされた約40万行のテーブルがあります。

これを設計した人は誰でも、会社に何らかの一意の識別子が必要であることに気づかなかったため、会社名のエントリが重複しています。

会社名に基づいてこれらすべてのレコードを照合し、ある種の基準に基づいて重複を削除するために、どのような方法を使用しますか(別の列)

これをPHPで行うためのスクリプトを作成することを考えていましたが、非常に多くの行を比較しながらスクリプトを実行できるとは本当に信じられません。何かアドバイス?

4

3 に答える 3

0

これまで私がこれを行った方法は、必要なセットのみを返すクエリを作成し(通常、DISTINCT +サブクエリを使用して、他の値に基づいて適切なレコードを決定する)、それを別のテーブルに挿入することです。次に、古いテーブルを削除して、新しいテーブルの名前を古い名前に変更できます。

于 2012-03-22T17:49:28.743 に答える
0

テーブルに重複がある会社のリストを見つけるには、次のようなスクリプトを使用できます。

SELECT NAME
FROM companies
GROUP BY NAME
HAVING COUNT(*) > 1

そして、以下は、col列に最大値を含むことを除いてすべての重複を削除します

DELETE del
FROM companies AS del
INNER JOIN (
    SELECT NAME, MAX(col) AS col
    FROM companies
    GROUP BY NAME
    HAVING COUNT(*) > 1
) AS sub
    ON del.NAME = sub.NAME AND del.col <> sub.col
于 2012-03-22T17:50:46.700 に答える
0

回答: 回答元

1)テーブル1から削除します

2)vtableとしてtable1、table1を使用する

3)WHERE(table1.ID> vtable.IDではありません)

4)AND(table1.field_name = vtable.field_name)

  1. ここでは、テーブル1があることをmysqlに伝えます。
  2. 次に、table1とtable1の値を持つ仮想テーブルを使用することを伝えます。
  3. これにより、mysqlはレコードをそれ自体と比較できなくなります。
  4. ここでは、同じfield_nameを持つレコードがあってはならないことを伝えます。
于 2012-03-22T17:52:51.830 に答える