Oracle SQL 中更新语句中的标识符无效
Posted
技术标签:
【中文标题】Oracle SQL 中更新语句中的标识符无效【英文标题】:invalid identifier in update statement in Oracle SQL 【发布时间】:2014-08-05 04:48:01 【问题描述】:我在下面有两张表:
hotel (**hotelNo**, hotelName, city)
room (**roomNo**, type, price, hotelNo)
在表hotel
中,hotelNo
是主键。在room
表中,roomNo
是主键,hotelNo
是外键。
现在我想将海德公园酒店所有房间的价格提高 5%。这是我的声明:
UPDATE room SET price = price * 1.05
WHERE room.hotelNo = hotel.hotelNo AND hotel.hotelName = 'Hyde Park';
oracle 给我一个错误,说 hotel.hotelName
是无效标识符。
这就是为什么?我怎样才能完成我的任务?
【问题讨论】:
将酒店添加到您的 from 子句 【参考方案1】:UPDATE room SET price = price * 1.05
WHERE hotelNo in (SELECT hotelNo FROM hotel WHERE hotelName = 'Hyde Park');
【讨论】:
【参考方案2】:问题是,您不是在任何地方SELECT
ing 表 HOTEL。
您可以使用如下内部查询:FIDDLE
UPDATE ROOM SET PRICE = PRICE * 1.05
WHERE
HOTELNO = (
SELECT HOTELNO
FROM HOTEL
WHERE
HOTELNAME = 'Hyde Park'
)
另一种使用join的方法(未测试,Reference)
UPDATE
(
SELECT R.PRICE
FROM ROOM R INNER JOIN HOTEL H
ON R.HOTELNO = H.HOTELNO
AND H.HOTELNAME = 'Hyde Park'
)
SET R.PRICE = R.PRICE * 1.05;
【讨论】:
@user3368506:已更新小提琴。请检查并投票是否有效。【参考方案3】: UPDATE room ,hotel SET price = price * 1.05
WHERE room.hotelNo = hotel.hotelNo AND hotel.hotelName = 'Hyde Park';
【讨论】:
以上是关于Oracle SQL 中更新语句中的标识符无效的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException:游标状态无效:标识符游标未定位在 UPDATE、DELETE、SET 或 GET 语句中的行上:;结果集为空