作者:gsgtqlg_132 | 来源:互联网 | 2023-09-23 19:21
我想更新 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.