为什么这个Oracle查询不起作用?

时间:2012-01-24 09:17:19

标签: sql oracle

我有这个简单的Oracle语句用于删除行...但我无法正常工作

delete from NPEA.tnpe00_all
where EXISTS
  (select 1
  from NPEA.tnpe05_doc, NPEA.tnpe00_all
  where NPEA.tnpe05_doc.n_doc =  NPEA.tnpe00_all.t_doc
    and NPEA.tnpe05_doc.n_prt is null
    and NPEA.tnpe05_doc.n_can = 4
  order by n_doc)

错误代码是

00907. 00000 -  "missing right parenthesis"

这有什么问题?

3 个答案:

答案 0 :(得分:10)

您不能在EXISTS子句中使用ORDER BY:

SQL> SELECT 1 FROM dual WHERE EXISTS (SELECT 1 FROM dual ORDER BY 1);

ERROR at line 1:
ORA-00907: missing right parenthesis

SQL> SELECT 1 FROM dual WHERE EXISTS (SELECT 1 FROM dual);

         1
----------
         1

集合中的order by子句没有任何意义,因此错误(肯定是无用的消息)。

答案 1 :(得分:3)

将其改写为

delete from NPEA.tnpe00_all WHERE NPEA.tnpe00_all.t_doc IN (
    SELECT NPEA.tnpe05_doc.n_doc 
    from NPEA.tnpe05_doc
    WHERE NPEA.tnpe05_doc.n_prt is null and NPEA.tnpe05_doc.n_can = 4
)

它做了同样的工作但是以更明显的方式

答案 2 :(得分:0)

    delete from NPEA.tnpe00_all
where EXISTS
  (select 1
  from NPEA.tnpe05_doc, NPEA.tnpe00_all
  where NPEA.tnpe05_doc.n_doc =  NPEA.tnpe00_all.t_doc
    and NPEA.tnpe05_doc.n_prt is null
    and NPEA.tnpe05_doc.n_can = 4)

这是有用的,请尝试这个