0

このテーブルの重複エントリを簡単に削除したい

CREATE TABLE IF NOT EXISTS `mups` (
  `idgroupe` varchar(15) NOT NULL,
  `fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

例 :

そのようなエントリが3つある場合

  ('36','143')
  ('36','143')
  ('36','143')

1行だけ残したい

アイデア ?

ありがとう!

4

3 に答える 3

2

UNIQUEキーワードを使用して両方の列にインデックスを定義するIGNOREと、MySQL はすべてのレコードの 1 つのコピーを除くすべてを削除します。

ALTER IGNORE TABLE mups ADD UNIQUE (idgroupe, fan)
于 2013-01-16T20:51:23.290 に答える
1

このテーブルを指す外部キー関係がない場合は、(一時) テーブルを使用してそこに個別の行をコピーできます。

CREATE TABLE temp_mups AS 
SELECT DISTINCT *
FROM mups ;

次に、からすべてを削除しますmups

DELETE 
FROM mups ;

必要な制約を追加しUNIQUEます。

ALTER TABLE mups
ADD CONSTRAINT mups_UQ
  UNIQUE (idgroupe, fan) ;

データを取得します。

INSERT INTO mups 
  (idgroupe, fan)
SELECT idgroupe, fan
FROM temp_mups ;

そして、一時テーブルを安全に削除します。

DROP TABLE temp_mups ;

SQL-Fiddle でテスト済み: test-1

于 2013-01-19T17:47:49.197 に答える
0

重複が次のようになっていることを確認できます。

SELECT idgroupe, fan, count(*)
FROM mups
GROUP BY idgroupe, fan
HAVING count(*) > 1
于 2013-01-16T20:50:05.870 に答える