您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在以下语句完成之前,不提交CTE删除

在以下语句完成之前,不提交CTE删除

这是预期的并有文件记录。

引用手册

WITH中的子语句彼此并与主查询并发执行。因此,在WITH中使用数据修改语句时,指定更新实际发生的顺序是不可预测的。所有语句都使用相同的快照执行(请参见第13章), 。这减轻了行更新实际顺序的不可预测性的影响,并且意味着RETURNING数据

(强调我的)

可以 使用链接的CTE删除公司:

with deleted_emp as (
  delete from employee 
  where id = 1 
  returning company_id, id as employee_id
)
delete from company
where id in (select company_id from deleted_emp) 
  and not exists (select * 
                  from employee e
                     join deleted_emp af 
                       on af.company_id = e.company_id 
                      and e.id <> af.employee_id)

重要的是从not exists查询中排除刚删除的员工,因为这在第二个delete语句中始终可见,因此不存在永远不会为真。因此,子查询从本质上检查是否存在除分配给同一公司的已删除员工以外的其他员工。

在线示例:https//rextester.com/IVZ78695

其他 2022/1/1 18:42:37 有479人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶