我正在尝试制作正常的更新声明。
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)
任何人都可以帮忙吗?
答案 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一组行是没有意义的)并且在那里是非法的。
删除后,查询就可以了。