如何删除重复记录并保留最近的记录?

时间:2013-11-08 10:43:50

标签: mysql sql

我有一张这样的表:

Country_city('id', 'country_id', 'City_id')

并在其上复制我选择的记录:

SELECT 
    CONCAT(Country_id, '+', City_id), 
    COUNT(CONCAT(Country_id, '+', City_id)) 
FROM Country_City
GROUP BY CONCAT(Country_id, '+', City_id) 
HAVING COUNT(CONCAT(Country_id, '+', City_id)) > 1

,结果如下:

CONCAT(Country_id, '+', City_id)  |  COUNT(CONCAT(Country_id, '+', City_id))
MA07+11                           |  48
MA07+13                           |  5
...

我尝试删除它们执行此操作:

DELETE FROM Country_City 
WHERE id NOT IN (
           SELECT MAX(id) 
           FROM Country_City 
           GROUP BY CONCAT(Country_id, '+', City_id)
           );

它不起作用;我的要求有问题吗?如何删除重复数据并保留一条记录?

1 个答案:

答案 0 :(得分:0)

使用CONCAT(Country_id, '+', City_id)

尝试此操作
DELETE cc FROM Country_City cc
INNER JOIN
(
               SELECT CONCAT(Country_id, '+', City_id) as cKey,MAX(id) as id 
               FROM Country_City 
               GROUP BY CONCAT(Country_id, '+', City_id)
               HAVING COUNT(CONCAT(Country_id, '+', City_id)) > 1           
) ccs on CONCAT(cc.Country_id, '+', cc.City_id) = ccs.cKey 
             and ccs.id != cc.id;

虽然此处可能不需要CONCAT,但您也可以使用:

DELETE cc FROM Country_City cc
INNER JOIN
(
 SELECT Country_id,City_id,MAX(id) as id 
 FROM Country_City 
 GROUP BY Country_id,City_id
 HAVING COUNT(*) > 1           
) ccs on cc.Country_id = ccs.Country_id 
      and cc.City_id = ccs.City_id 
      and ccs.id != cc.id;
相关问题