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'

解决方案 »

  1.   

    这条语句
    如果PAYROLL_TBL的 EMPLOYEE_ID没有为
    222222222的就不会删除EMPLOYEE_TBL表
    EMPLOYEE_ID为222222222的数据..
      

  2.   

    前一句sql‘222222222’必须是单条记录
      

  3.   

    那如果PAYROLL_TBL中的EMPLOYEE_ID没有为 
    222222222的记录 ,那个select语句会返回什么值?
    第一个EMPLOYEE_ID =会被赋什么值
      

  4.   

    DELETE FROM EMPLOYEE_TBL 
    WHERE EMPLOYEE_ID = (SELECT EMPLOYEE_ID 
    FROM PAYROLL_TBL 
    WHERE EMPLOYEE_ID = '222222222'; 
    这里面的select语句必须返回单条值..这个很好理解吧.
    就像单表删除一样,比如说
    delete from a where a.id=1
    只不过1的条件变成select 语句,再加上我上面说的
    解释..应该懂了吧?
      

  5.   

    SQL> select * from test;        ID NN
    ---------- ----------
             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会报错,而第二句就把所有的的都删除