【发布时间】:2019-09-06 16:56:32
【问题描述】:
我正在使用 postgresql。 要删除表中的重复项,我使用以下查询:
DELETE FROM dups a USING (
SELECT MIN(ctid) as ctid, key
FROM dups
GROUP BY key HAVING COUNT(*) > 1
) b
WHERE a.key = b.key
AND a.ctid <> b.ctid
参考:https://stackoverflow.com/a/12963112/4940278
但是,有一个表说ref_table,其中也引用了dups.id。在删除重复项之前,我需要更新另一个表。
用副本的 id 更新引用表的查询是什么,这样就不会丢失数据?
例如:
表 1,比如dups
id key
1 Luna
2 Hermione
3 Luna
表 2,比如ref_table
id dups_id data
1 2 Auror
2 1 Researcher
现在删除重复项的查询将删除 dups 表中 id 为 1 的记录,因为它是重复项。
但是,ref_table 中引用了该记录,因此我需要使用将要保留的记录来更新它。
i.e) Table1 应该变成:
id key
2 Hermione
3 Luna
表2应该变成:
id dups_id data
1 2 Auror
2 3 Researcher
【问题讨论】:
标签: sql postgresql postgresql-9.4