SQL> DELETE FROM EMPLOYEE_TBL
WHERE EMPLOYEE_ID = (SELECT EMPLOYEE_ID
FROM PAYROLL_TBL
WHERE EMPLOYEE_ID = '222222222';
1 row deleted.
分析
我们将雇员ID 号为222222222 的雇员删除了
为什么不能直接 DELETE FROM EMPLOYEE_TBL
WHERE EMPLOYEE_ID = '222222222'
WHERE EMPLOYEE_ID = (SELECT EMPLOYEE_ID
FROM PAYROLL_TBL
WHERE EMPLOYEE_ID = '222222222';
1 row deleted.
分析
我们将雇员ID 号为222222222 的雇员删除了
为什么不能直接 DELETE FROM EMPLOYEE_TBL
WHERE EMPLOYEE_ID = '222222222'
如果PAYROLL_TBL的 EMPLOYEE_ID没有为
222222222的就不会删除EMPLOYEE_TBL表
EMPLOYEE_ID为222222222的数据..
222222222的记录 ,那个select语句会返回什么值?
第一个EMPLOYEE_ID =会被赋什么值
WHERE EMPLOYEE_ID = (SELECT EMPLOYEE_ID
FROM PAYROLL_TBL
WHERE EMPLOYEE_ID = '222222222';
这里面的select语句必须返回单条值..这个很好理解吧.
就像单表删除一样,比如说
delete from a where a.id=1
只不过1的条件变成select 语句,再加上我上面说的
解释..应该懂了吧?
---------- ----------
1 1
2 1
1 2SQL> delete from test where id=(select id from test where id=1);
delete from test where id=(select id from test where id=1)
*
第 1 行出现错误:
ORA-01427: 单行子查询返回多个行
SQL> delete from test where id=(select id from test where id=3);已删除0行。这个例子,应看了就明白了,如果不是单条记录,第一句sql会报错,而第二句就把所有的的都删除