SQL 删除违反参照完整性的记录,
SQL 删除违反参照完整性的记录 问题描述
你想从表里删除一些记录,因为在另一个表里不存在与这些记录相匹配的数据。例如,一些员工所属的部门其实并不存在,你希望删除这些员工。
SQL 删除违反参照完整性的记录 解决方案
使用 NOT EXISTS
谓词和子查询来确认部门编号的有效性。
delete from emp
where not exists (
select * from dept
where dept.deptno = emp.deptno
)
或者,也可以使用 NOT IN
谓词。
delete from emp
where deptno not in (select deptno from dept)
SQL 删除违反参照完整性的记录 扩展知识
删除其实就是查询,最重要的步骤是要写出正确的 WHERE
子句条件,以找出要删除哪些记录。
上述 NOT EXISTS
解决方案使用关联子查询来检查给定的 EMP
记录是否存在一条与其 DEPTNO
列相匹配的 DEPT
记录。如果存在这样的记录,那么该 EMP
记录就应该被保留下来。否则,它就会被删除。每一条 EMP
记录都会被这样检查一次。
上述 IN
解决方案使用子查询来获取有效部门编号的列表。然后针对每一条 EMP
记录,都会与该列表做比照检查。如果一条 EMP
记录的 DEPTNO
不存在于该列表中,则该 EMP
记录会被删除。