热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

0RA00907:SQL缺少右括号

我想更新Shop.id,使用UPDATE和对Area的查询,比较两个表的属性area和location。所以,我有这

我想更新 Shop.id,使用 UPDATE 和对 Area 的查询,比较两个表的属性 area 和 location。所以,我有这个更新,它给了我

错误 SQL:ORA-00907:缺少右括号

我不知道有什么问题,我错过了什么?

代码 :

UPDATE Shop
SET shop.idarea= (SELECT AREA.id FROM AREA order by TO_NUMBER(AREA.id)ASC);

使用 area.id 更新 Shop.area

回答

ORDER BY子句在子查询中在语法上无效;您需要:


  • 去掉它; 或者

  • 如果您使用的是 Oracle 12 或更高版本,可以添加FETCH FIRST ROW ONLY.

因此,要使查询在语法上有效:

UPDATE Shop
SET shop.idarea = ( SELECT AREA.id FROM AREA );

或者:

UPDATE Shop
SET shop.idarea = ( SELECT AREA.id
FROM AREA
ORDER BY TO_NUMBER(AREA.id) ASC
FETCH FIRST ROW ONLY);

但是,这并不意味着查询将起作用(因为可能存在其他错误,例如ORA-01427: single-row subquery returns more than one row,如果Area表中有多行)或可能不会执行您的意图,因为您没有告诉我们您想要什么查询以实现或您的表中有哪些数据。



更新

从您的图像中,您可能想要以下内容:

UPDATE Shop s
SET idarea = ( SELECT a.id
FROM AREA a
WHERE a.location = s.location );

或者

UPDATE Shop s
SET idarea = ( SELECT a.id
FROM AREA a
WHERE a.location = s.location AND a.areanum = s.area );



  • @Roman For the second option, what version of Oracle are you using? For the first, what are you trying to achieve; because you are probably using the wrong method and need to use a `WHERE` condition to filter the `SELECT` but you have not described what you logic is so we cannot advise you.





推荐阅读
author-avatar
gsgtqlg_132
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有