http://www.educity.cn 作者:佚名 来源:希赛教育
在一个表中有重复的记录,重复的次数可能是一条或多条,如何在重复记录中只留下一条,删除其他多余的记录,使数据集的每条记录都是唯一的?

    1 列出表中的重复记录

    (sameoda)
    SELECT [2].[地级市], Count(*) AS 记录数
    FROM 2
    GROUP BY [2].[地级市]
    HAVING count(*)>1
    ORDER BY [地级市];

地级市 记录数 
100000951094 2 
100000951116 2 
100000951127 2 
100000951138 2 
100000951149 2 
100000951150 2 


    2 以下是除去相同记录的过程

    1)列出表中的所有重复记录

    (表2中重复记录)

    SELECT 2.*
    FROM 2 RIGHT JOIN sameoda ON [2].[地级市]=[sameoda].[地级市];

ID 编号 地级市 保险货物名称 数量及包装单位 声明价值(元) 运输自 运输到 
7469 1466 100000951094 苯扎贝特片、水飞蓟宾胶囊 3箱 18600 天津 佳木斯 
5351 1077 100000951094 苯扎贝特片、水飞蓟宾胶囊 3箱 18600 天津 佳木斯 
5350 1076 100000951116 水飞蓟宾胶囊 5箱 29000 天津 乌鲁木齐 
7468 1465 100000951116 水飞蓟宾胶囊 5箱 29000 天津 乌鲁木齐 
5353 1079 100000951127 氟他胺片 4箱 66800 天津 哈尔滨 
7471 1468 100000951127 氟他胺片 4箱 66800 天津 哈尔滨 
  2)从重复记录中找到唯一的一条记录

    minbihanhao
    SELECT 2.*
    FROM 2 LEFT JOIN 表2中重复记录 ON [2].[ID]=[表2中重复记录].[ID]
    WHERE [表2中重复记录].[id] Is Null;

地级市 id 
100000951094 5351 
100000951116 5350 
100000951127 5353 
100000951138 5354 
100000951149 5352 
100000951150 5355 


    3)显示唯一记录的全部信息

    allsame1
    SELECT 2.*
    FROM 2 LEFT JOIN minbihanhao ON ([2].[地级市]=[minbihanhao].[地级市]) AND ([2].[id]=[minbihanhao].[id])
    WHERE [minbihanhao].[地级市] Is Not Null
    ORDER BY [2].[id];

    4)在原表中除去所有相同的记录

    dropsame2
    SELECT 2.*
    FROM 2 LEFT JOIN 表2中重复记录 ON [2].[ID]=[表2中重复记录].[ID]
    WHERE [表2中重复记录].[id] Is Null;

    5)表2除去重复记录=在原表中除去所有相同的记录+显示唯一记录的全部信息

    表2除去重复记录

    SELECT *
    FROM dropsame2
    UNION select * from
    allsame1;



[1]  [2]