2017-02-11 77 views
0

我有一個表> 500,000行,其中有重複的條目需要刪除,但只有幾列匹配。MYSQL刪除多列匹配的重複信息

主表具有這樣 地名,緯度&經度比賽

我做了一個搜索,發現這個看起來下面列

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

我需要刪除重複(離開第一條記錄)正確但不適合我。 我有重複了原來的表結構到新表(tblTemp)

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

,但我得到的錯誤

列數並不在行1

+2

當然會。您正嘗試將3個值插入9列。 – GurV

+0

請指定哪些行考慮萬一有多個行相同的placeName,緯度,經度...也許最大ID? – GurV

回答

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 
       ); 
0

假設如果你想創建一個使用選擇使用該表

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; 

:在tblTemp具有相同的一組是tblCountry_admin列,你想在重複的情況下,最大號的行,您可以使用此:

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; 
+0

此選項需要長時間運行,如果我打斷它,沒有條目添加到tblTemp – lifeson

+0

處理50萬條記錄需要花費時間。但是,如果在原始表格中提供了適當的索引,它將比組操作更快。 – GurV

0

,如果你想通過laceName刪除重複的行,緯度經度&離開舊的你可以

你可以檢查選擇DUPLI cated行此笏

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 
    ) 

你在你插入適當選擇ID的事實列的數量插入不匹配的數量錯誤的列是選擇