当前位置:  开发笔记 > 编程语言 > 正文

从表中删除重复项

如何解决《从表中删除重复项》经验,为你挑选了1个好方法。

数据库类型是PostGres 8.3.

如果我写道:

SELECT field1, field2, field3, count(*) 
FROM table1
GROUP BY field1, field2, field3 having count(*) > 1;

我有一些计数超过1的行.我怎么能取出副本(我仍然想要每行1行而不是+1行...我不想全部删除它们.)

例:

1-2-3
1-2-3
1-2-3
2-3-4
4-5-6

应该成为:

1-2-3
2-3-4
4-5-6

我找到的唯一答案就是那里,但我想知道我是否可以在没有哈希列的情况下做到这一点.

警告 我没有带唯一编号的PK,所以我不能使用min(...)技术.PK是3个领域.



1> Tom H..:

这是所有表应具有主键的许多原因之一(不一定是ID号或IDENTITY,而是一个或多个列的组合,它们唯一地标识行并且在数据库中强制执行其唯一性).

你最好的选择是这样的:

SELECT field1, field2, field3, count(*) 
INTO temp_table1
FROM table1
GROUP BY field1, field2, field3 having count(*) > 1

DELETE T1
FROM table1 T1
INNER JOIN (SELECT field1, field2, field3
      FROM table1
      GROUP BY field1, field2, field3 having count(*) > 1) SQ ON
            SQ.field1 = T1.field1 AND
            SQ.field2 = T1.field2 AND
            SQ.field3 = T1.field3

INSERT INTO table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM temp_table1

DROP TABLE temp_table1

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有