【问题标题】:ERROR ::QUERY FAILING in DELETE STATEMENT删除语句中的错误 ::QUERY FAILING
【发布时间】:2011-09-15 10:20:10
【问题描述】:

我有一个要求,我希望根据表 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' 
      );

请推荐

【问题讨论】:

    标签: sql oracle oracle10g oracle11g


    【解决方案1】:
    DELETE FROM emp1 a 
    WHERE a.empno IN 
          ( SELECT b.empno 
            FROM emp b 
            WHERE b.LOC = 'NEW YORK' 
          );
    

    【讨论】:

      【解决方案2】:

      我不熟悉 MERGE 语句,但我会说 emp b 没有正确声明,因为 b 在括号之外。

      另外,我建议先创建一个视图(或临时连接的表),以便在执行 DELETE 命令之前查看哪些项目匹配。然后您可以基于视图使用 DELETE 并轻松地从两个表中删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多