2012-01-31 12 views
1

telephoneフィールドに重複している電話番号が多数あります。どのようにSQLでそれを行うことができますか?重複の削除

重複しているレコードを削除したいと思います。

また、複製されているものがいくつあるか知りたいですか?

おかげ

+0

可能な複製http://stackoverflow.com/q/8567007/27535またはhttp://stackoverflow.com/q/8590010/27535とmore more – gbn

+0

SQLのみを使用する必要がありますか?あなたはそのためのビットコードを書いていますか? これは、コードfuction –

+0

の可能性のある複製[mysqlデータベースの重複を削除](http://stackoverflow.com/questions/8793231/remove-duplicates-in-mysql-database) –

答えて

1

このお試しください:これは最初の1人の

注意を除いて、その電話番号にすべてのエントリを削除します

DELETE FROM phonenumbers WHERE telephone = "[phone number here]" AND id NOT IN (SELECT id FROM phonenumbers WHERE telephone = "[phone number here]" LIMIT 1) 

を、これはあなたに固有の識別子IDを持っていると仮定しています表。 (そして、あなたのテーブル名はphonenumbersある

0

このクエリは役立つかもしれないあなたの本当のテーブル名にそのを変更します。。

DELETE `P`.* 
FROM `phones` `P` 
LEFT JOIN ( 
    SELECT `telephone`, MIN(`id`) `ids` 
    FROM `phones` 
    GROUP BY `telephone` 
) `TA` ON `P`.`id` = `TA`.`ids` 
WHERE `TA`.`ids` IS NULL; 

自分のスキーマごとにテーブル名やフィールド名を変更するには注意してください。また、上記のことを前提としてい。あなたのテーブルがプライマリ列は、上記のクエリでidと表記

ロジックがありました:

  1. は、サブクエリを使用して、我々はまず、すべてのトンを見つけます電話番号と各番号の最初のレコード。これらは残る記録であり、残りは
  2. 削除し、我々は左の「電話」の表と派生テーブル間の結合、および派生テーブル
に一致していない「携帯電話」からすべてのレコードを削除します

上記のクエリの利点は、1回のショットですべての重複レコードが削除されることです。重複カウントのため

、あなたは次のように何かをすることがあります。

SELECT `telephone`, COUNT(1) `cnt` 
FROM `phones` 
GROUP BY `telephone` 
HAVING COUNT(1) > 1 

それが役に立てば幸い!あなたが古いaddrbookテーブルを削除し、あなたが望んだ場合addrbookする新しいaddrbook2の名前を変更することができ

CREATE TABLE addrbook2 
    SELECT * FROM addrbook GROUP BY telephone 

:ここ

+0

@ user791022、ソリューションを試してみませんか?それは動作しましたか? – Abhay

0

は「電話」フィールドを複製欠けて新しいものへのコピーがあなたのテーブルシンプルなものです。