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】:

问题是,您不是在任何地方SELECTing 表 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中的Oracle Sql语句

Oracle 数据库列定义不明确/标识符无效

java.sql.SQLException:游标状态无效:标识符游标未定位在 UPDATE、DELETE、SET 或 GET 语句中的行上:;结果集为空

Oracle常用的SQL方法总结

更新时标识符无效 (Oracle)

ORA-00904: "CEILING": ORACLE 11G 中的标识符无效