MYSQL删除多列匹配的重复项

时间:2017-02-11 17:12:56

标签: mysql

我有一张桌子> 500,000行,其中有重复的条目需要删除,但只有几列匹配。

主表格包含以下列

id,
countryID,
postalCode,
adminName1,
adminName2,
placeName,
adminName3,
latitude,
longitude

我需要删除重复项(留下第一条记录) placeName,latitude&经度匹配

我有一个搜索,发现这看起来正确,但对我不起作用。 我已将原始表结构复制到新表(tblTemp)

INSERT INTO tblTemp(id,countryID,postalCode,adminName1,adminName2,placeName,adminName3,latitude,longitude)
SELECT DISTINCT placeName,latitude,longitude
FROM tblCountry_admin;

但我得到了错误

  

列数与第1行的值计数不匹配

3 个答案:

答案 0 :(得分:0)

使用WHERE

INSERT INTO tblTemp (id, countryID, postalCode, adminName1,adminName2,     
                     placeName, adminName3, latitude, longitude)
    SELECT id, countryID, postalCode, adminName1, adminName2,
           placeName, adminName3, latitude, longitude
    FROM tblCountry_admin a
    WHERE a.id = (SELECT MIN(a2.id)
                  FROM tblCountry_admin a2
                  WHERE a2.placeName = a.placeName AND
                        a2.latitude = a.latitude AND
                        a2.longitude = a.longitude
                 );

答案 1 :(得分:0)

假设tblTemptblCountry_admin具有相同的列集,并且您希望在重复的情况下获取具有最大ID的行,则可以使用此:

INSERT INTO tblTemp
select a.*
from tblCountry_admin a left join tblCountry_admin b on a.placeName = b.placeName
    and a.latitude = b.latitude
    and a.longitude = b.longitude
    and a.id < b.id
where b.id is null;

如果您想使用创建表,请选择使用:

create table tblTemp as
select a.*
from tblCountry_admin a left join tblCountry_admin b on a.placeName = b.placeName
    and a.latitude = b.latitude
    and a.longitude = b.longitude
    and a.id < b.id
where b.id is null;

答案 2 :(得分:0)

如果你想通过laceName,latitude&amp;删除重复的行。经度离开旧的你可以

你可以检查选择这个重复的行

  select * from tblCountry_admin
  where id not in (
     select min(id)
     from tblCountry_admin
     group by placename, latitude, longitude
     )

然后你可以删除这种方式

delete from tblCountry_admin
where id not in (
   select min(id)
   from tblCountry_admin
   group by placename, latitude, longitude
   )

你输入的错误插入select id因为插入的列数与列数不匹配的事实是