gpt4 book ai didi

sql - PostgreSQL 导入,如果不满足约束设置为空

转载 作者:行者123 更新时间:2023-11-29 12:12:40 24 4
gpt4 key购买 nike

我正在尝试将数据库从 file-maker pro 导入到 PostgreSQL 中。由于维护不善,随着时间的推移,数据在表之间的链接中出现了一些退化。
我试图导入没有约束的数据,然后使用 USING block 添加约束以在引用值不存在时将其设置为 null。

我有两个表,一个是people 表,一个是show 表。我想在 show 表的 show_leader_id 列中将所有不存在的人员 ID 设置为 null。这是我拥有的:

BEGIN;
ALTER TABLE show ADD FOREIGN KEY (show_leader_id) REFERENCES people
USING (CASE WHEN (SELECT COUNT(*) FROM people WHERE person_id=show_leader_id)=1 THEN show_leader_id ELSE NULL END);
COMMIT;

最佳答案

使用 EXISTS 检查是否存在半连接:

UPDATE show s
SET show_leader_id = NULL
WHERE NOT EXISTS (SELECT 1 FROM people WHERE person_id = s.show_leader_id);

然后添加你的fk约束。
如果您有并发写入操作,请在同一事务中运行这两个操作 like @Eelke advises . (但您的情况可能并非如此。)

如果 people.person_id 中有 NULL 值,

NOT IN 可能是危险的。由于您正在处理一团糟,因此这并非不可能。详情:

关于sql - PostgreSQL 导入,如果不满足约束设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com