首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表中删除重复

从表中删除重复
EN

Stack Overflow用户
提问于 2008-10-28 14:38:54
回答 7查看 1.4K关注 0票数 5

数据库类型为PostGres 8.3。

如果我写:

代码语言:javascript
复制
SELECT field1, field2, field3, count(*) 
FROM table1
GROUP BY field1, field2, field3 having count(*) > 1;

我有一些行的计数超过1。我如何删除副本(我仍然希望每一行,而不是+1行.我不想全部删除。)

示例:

代码语言:javascript
复制
1-2-3
1-2-3
1-2-3
2-3-4
4-5-6

应成为:

代码语言:javascript
复制
1-2-3
2-3-4
4-5-6

我找到的唯一答案是http://www.siafoo.net/article/64,但我不知道是否可以不使用散列。

警告我没有一个唯一编号的PK,所以我不能使用min(.)技术。PK是三个字段。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-10-28 14:59:14

这是所有表都应该有主键的原因之一(不一定是ID号或标识,而是一个或多个列的组合,这些列唯一地标识一行并在数据库中强制其唯一性)。

你最好的选择是这样的:

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2008-10-28 14:58:14

一个可能的答案是:

代码语言:javascript
复制
CREATE <temporary table> (<correct structure for table being cleaned>);
BEGIN WORK;   -- if needed
INSERT INTO <temporary table> SELECT DISTINCT * FROM <source table>;
DELETE FROM <source table>
INSERT INTO <source table> SELECT * FROM <temporary table>;
COMMIT WORK;  -- needed
DROP <temporary table>;

我不确定事务语句是否需要“work”,也不确定在PostgreSQL中是否需要显式BEGIN。但是这个概念适用于任何DBMS。

唯一要注意的是引用约束,特别是触发的删除操作。如果存在这些问题,情况可能就不那么令人满意了。

票数 0
EN

Stack Overflow用户

发布于 2008-10-28 15:00:57

这将使用OID对象ID (如果表是用它创建的):

代码语言:javascript
复制
DELETE FROM table1
WHERE OID NOT IN (SELECT   MIN (OID)
                              FROM table1
                          GROUP BY field1, field2, field3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/243567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档