2009-11-25 20 views
16

この設定で複製されたものを削除する方法はありますか?Mysqlの重複行(2列で重複が検出されました)

id A  B 
---------------- 
1  apple 2 
2  orange 1  
3  apple 2 
4  apple 1 

ここでは、2回発生するリンゴ(リンゴ、2)を取り除きたいと思います。 ID番号はユニークです。もしそうでなければDISTINCTキーワードを使用します。どのように列AとBのキーを作成し、その上でDISTINCTキーワードを使って必要なものを得ることができますか?あなたの返信をありがとうございました。

+0

返信いただきありがとうございます。今私は良い方法があると思います。 – jason

答えて

17
delete from myTable 
where id not in 
(select min(id) 
from myTable 
group by A, B) 

つまり、角括弧内の選択は、AとBの各グループの最初のIDを返します。このセットに含まれていないすべてのidsを削除すると、最初のオカレンスに「後続する」A + B組み合わせのすべての出現が削除されます。

EDIT:この構文は問題があると思わ:バグレポートを参照してください。

http://bugs.mysql.com/bug.php?id=5037

可能な回避策は、これを行うことです。

delete from myTable 
where id not in 
(
     select minid from 
     (select min(id) as minid from myTable group by A, B) as newtable 
) 
+0

ニース。非常に素晴らしい。 –

+0

これは私の答えに比べてどのように実行されますか?私はそれを分析するDBの達人ではありません... –

+0

ニース.. これはid = 3で、どこにidが1,3でない行を削除します –

1
DELETE FROM fruit_table FT1 
WHERE EXISTS 
(
    SELECT * FROM fruit_table FT2 
    WHERE FT2.fruit_name_column = FT1.fruit_name_column 
    AND FT2.fruit_integer_column = FT1.fruit_integer_column 
    AND FT2.id <> FT1.id 
) 

これはあなたドンを想定しています重複したレコードのどれが削除されたかは気にしない。

+0

MySQLのエラー - 「SQL構文に誤りがあります。MySQLサーバのバージョンに対応したマニュアルをチェックして、「FT1」の近くで使用する正しい構文を確認してください。 – Utkanos

0

あなたが望むデータを一時テーブルを使用することができます。私はあなたがここに求めているかを正確にはわからない

insert into temp_table 
select min(id), A, B 
group by A, B 
0

。 A列とB列の重複を避けたい場合は、前述の内容を実行してくださいSELECT DISTINCT A, B FROM XXX。たぶんあなたは、あなたが見たいと思う結果のタイプの例を投稿することができます。

+0

"group by"他の投稿はこれを明確にしています。 – jason

1
DELETE 
FROM mytable 
USING mytable, mytable AS vtable 
WHERE vtable.id > mytable.id 
AND mytable.A = vtable.A 
AND mytable.A = vtable.A 
+0

MySQLのエラー - "SQL構文に誤りがあります。正しい構文が" tbl USING ... "の近くで使用するようにMySQLサーバのバージョンに対応するマニュアルを確認してください。 – Utkanos

6

さらに別のもの(http://labs.creativecommons.org/2010/01/12/removing-duplicate-rows-in-mysql/から)。

ALTER IGNORE TABLE mytable ADD UNIQUE INDEX tmpindex (A,B); 
ALTER TABLE mytable DROP INDEX tmpindex; 

IGNOREキーワードはそれがUNIQUEキーワードだけではなく、失敗に違反する行をドロップしますMySQLの拡張である:それを削除する一意のインデックスを追加します。

+1

mysqlでは動作しません –

関連する問題