gpt4 book ai didi

sql - PostgreSQL:删除从另一个表引用的行

转载 作者:行者123 更新时间:2023-11-29 11:26:37 25 4
gpt4 key购买 nike

我有两个表,object 和 object_data,object 通过外键引用 object_data(关系是 1:1)。对于一组对象,我需要清空它们的 object_data 引用并删除相应的 object_data 行,如下所示:

DELETE FROM object_data WHERE id IN
( SELECT object_data_id FROM object WHERE ... );

UPDATE object SET object_data_id = NULL WHERE ...;

问题是,外键约束不允许删除仍然从对象引用的 object_data 行。

我当前的解决方案是将 SELECT 的结果读入列表,然后清空外键,然后使用 IN 运算符以合理大小的批处理删除 object_data 行。有更好的解决方案吗?添加一个从 object_data 返回到 object 的列不是一个选项。

最佳答案

是的,使用 CTE(通用表表达式)

WITH tmp AS (SELECT object_data_id FROM object WHERE ...),
upd AS (UPDATE object SET object_data_id = NULL WHERE ...)
DELETE FROM object_data
WHERE id IN (SELECT object_data_id FROM tmp);

第一个叫tmp的CTE先执行,然后记住你需要的数据名为 upd 的第二个 CTE 确实将字段设置为 NULL最后 DELETE 使用 tmp 中的数据执行 DELETE

关于sql - PostgreSQL:删除从另一个表引用的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29305653/

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