【发布时间】:2020-04-10 09:13:06
【问题描述】:
我的 postgres 数据库中有一个表,它基本上是一个大学字典,有两列:id 和 name。
我需要对字典进行一些清理,并且需要执行以下操作:
update university_dictionary set name=replace(name, 'NY', 'New York');
问题是name 列上设置了唯一约束,因此如果存在University of NY 和University of New York,则此更新将导致唯一约束违规。有没有办法在更新后删除违反约束的记录?
【问题讨论】:
-
我很困惑为什么你要等到更新之后删除记录。为什么不直接删除多余的记录?
-
好点,虽然我不确定在这种情况下删除语句的
where条件是什么? -
@Matt:你希望最后保留哪两行?您需要有一种方法可以在这两者之间进行选择,这就是您的
WHERE子句。如果您无法再将这两者区分开来,那么在更新后(如果可能的话)删除将是随机的/不可能的。 -
留下哪一个并不重要,只是为了它,原来的总是可以保留。你是说对于像纽约大学这样的每一个案例,我都需要写一个不同的具体声明来删除这个条目?
-
@Matt :如果保留原始文件是您想要的,那么我相信这可能只是
DELETE。如果您想删除会产生冲突的行,那么DELETE FROM university_dictionary WHERE EXIST (...)可能就是您想要的(很难说,因为我们已经偏离了原始问题)。
标签: sql database postgresql