缺少右括号和更新语句

时间:2018-04-17 17:07:01

标签: sql oracle sql-update

我正在尝试制作正常的更新声明。

update adm_types_uda set type_id =28202 where recid in (
SELECT  recid FROM 
    (
    SELECT *FROM adm_types_uda 
    ORDER BY recid desc
    )
WHERE rownum <= 284
ORDER BY recid ) 

它给了我

SQL Error: ORA-00907: missing right parenthesis

内部选择之间的工作良好独立。

我尝试给所有选择别名但仍然给出相同的错误

update adm_types_uda uda set uda.type_id =28202 where uda.recid in (
SELECT  gd.recid FROM 
    (
    SELECT * FROM adm_types_uda u
    ORDER BY u.recid desc
    ) gd
WHERE rownum <= 284
ORDER BY gd.recid)

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

修正版:

update demo
set    type_id = 28202
where  recid in
       ( select recid from 
                ( select *from demo 
                  order by recid desc )
         where rownum <= 284 )

我的第一次尝试错误(感谢mathguy)是通过将外部where rownum ... order by ...移动到内部子查询来重构外部order by,但是我错过了外部order by无论如何都是多余的,它只是需要删除

缺少右括号&#39;错误是因为解析器没有识别子查询中的a => s,因为这是不允许的(我在SQL参考中没有看到任何关于此的明确声明,但它不是't} )。

答案 1 :(得分:2)

删除最后一个ORDER BY子句,它不执行任何操作(在IN条件中使用ORDER一组行是没有意义的)并且在那里是非法的。

删除后,查询就可以了。