2016-10-24 8 views
0

次の表を参考にしてください。 CSVからインポートされていますが、主キーはありません。mysqlテーブルの重複をすべて削除してください

+-----------+----------+----+----+----+ 
| firstname | lastname | c1 | c2 | c3 | 
+-----------+----------+----+----+----+ 
| johnny | bravo | a | b | c | 
| bruce  | willis | x | y | x | 
| john  | doe  | p | q | r | 
| johnny | bravo | p | q | r | 
| johnny | bravo | p | q | r | 
| bruce  | willis | x | y | z | 
+-----------+----------+----+----+----+ 

(firstname、lastname)が複数回表に表示されるすべての行を削除します。出力は次のようになります。

+-----------+----------+----+----+----+ 
| firstname | lastname | c1 | c2 | c3 | 
+-----------+----------+----+----+----+ 
| john  | doe  | p | q | r | 
+-----------+----------+----+----+----+ 
+0

[どのようにすることができますの可能性のある重複重複する行を削除しますか?](http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows) – musefan

+0

PRIMARY KEYは何ですか? – Strawberry

答えて

3

を以下のようにしてください、最善の方法はjoinを使用することです:

delete t 
from t join 
(
    select t2.firstname, t2.lastname 
    from t t2 
    group by t2.firstname, t2.lastname 
    having count(*) > 1 
) t2 
    on t.firstname = t2.firstname and 
     t.lastname = t2.lastname; 
0

削除の代わりに次のように選択できます。

SELECT * FROM TABLE A 
INNER JOIN 
(
    SELECT FirstName, LastName, COUNT(firstname) AS num 
    FROM TABLE 
    GROUP BY FirstName, LastName 
) B ON A.FirstName = B.FirstName AND A.LastName = B.LastName 
WHERE B.num = 1 

しかし、あなたが削除したい場合は、その後のMySQLでは

DELETE A 
FROM TABLE A 
INNER JOIN 
(
    SELECT FirstName, LastName, COUNT(firstname) AS num 
    FROM TABLE 
    GROUP BY FirstName, LastName 
) B ON A.FirstName = B.FirstName AND A.LastName = B.LastName 
WHERE B.num > 1 
0
delete from table_name n 
where (select count(*) from table_name z 
where n.firstname = z.firstname and n.lastname = z.lastname) > 1 
関連する問題