ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何从表中删除重复值

如何从表中删除重复值

原创 Linux操作系统 作者:tolywang 时间:2009-04-15 16:20:15 0 删除 编辑

表  C_MESSAGE_T   PK 字段为 MSG_ID, LANGUAGE_TYPE, PROGRAM_ID , 查询出所有重复值

SELECT *  FROM   SFIS1.C_MESSAGE_T
 WHERE   (MSG_ID, LANGUAGE_TYPE, PROGRAM_ID) IN
               (  SELECT   MSG_ID, LANGUAGE_TYPE, PROGRAM_ID 
                    FROM   SFIS1.C_MESSAGE_T
                GROUP BY   MSG_ID, LANGUAGE_TYPE, PROGRAM_ID  
                  HAVING   COUNT(*) > 1)

按照规则保留ROWID最小的一笔,当然如何删除还要看开发人员的建议 。这里假设保留ROWID 最小的。


 DELETE    FROM   SFIS1.C_MESSAGE_T
 WHERE   (MSG_ID, LANGUAGE_TYPE, PROGRAM_ID) IN
               (  SELECT   MSG_ID, LANGUAGE_TYPE, PROGRAM_ID 
                    FROM   SFIS1.C_MESSAGE_T
                GROUP BY   MSG_ID, LANGUAGE_TYPE, PROGRAM_ID  
                  HAVING   COUNT(*) > 1)
         AND ROWID NOT IN (  SELECT   MIN (ROWID)
                               FROM   SFIS1.C_MESSAGE_T 
                           GROUP BY   MSG_ID, LANGUAGE_TYPE, PROGRAM_ID
                             HAVING   COUNT(*) > 1);

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/35489/viewspace-666845/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14696595