我有一张桌子> 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行的值计数不匹配
答案 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)
假设tblTemp
与tblCountry_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因为插入的列数与列数不匹配的事实是