0RA-00907:SQL缺少右括号

我想更新 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.

以上是0RA-00907:SQL缺少右括号的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>