PostgreSQL:删除从另一个表引用的行
发布时间:2020-12-13 18:07:27 所属栏目:百科 来源:网络整理
导读:我有两个表,object和object_data,对象通过外键引用object_data(关系是1:1).对于一组对象,我需要将其object_data引用置空并删除相应的object_data行,如下所示: DELETE FROM object_data WHERE id IN( SELECT object_data_id FROM object WHERE ... );UPDATE
我有两个表,object和object_data,对象通过外键引用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引用回对象的列不是一个选项.
是的使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |