2011-09-15 22 views
1

我有一个要求,我希望根据表A的条件选择行并且必须删除表B.错误::删除陈述中的查询失败

例如EMP和EMP1两个表

Merge into emp1 a 
using (select * from emp) b 
    on (a. empno =b.empno) 
WHEN MATCHED THEN DELETE 
where(b.LOC='NEW YORK'); 

上面的查询结果中的错误。 如果我使用Where exists,表A中的所有行都被删除,这不是一个正确的解决方案。

delete from emp1 a 
where exists 
     (select null 
     from emp b 
     where a. empno =b.empno 
      and b.LOC='NEW YORK' 
    ); 

请建议

回答

3
DELETE FROM emp1 a 
WHERE a.empno IN 
     (SELECT b.empno 
     FROM emp b 
     WHERE b.LOC = 'NEW YORK' 
    ); 
0

我不熟悉的MERGE语句,但我会说,EMP B未正确申报,因为b是括号外。

此外,我会建议先执行一个DELETE命令,让视图(或临时连接的表)能够看到什么项匹配。然后您可以使用基于视图的DELETE并轻松从两个表中删除。