数据库类型是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个领域.
这是所有表应具有主键的许多原因之一(不一定是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