【问题标题】:invalid identifier in update statement in Oracle SQLOracle SQL 中更新语句中的标识符无效
【发布时间】:2023-03-15 00:27:02
【问题描述】:

我在下面有两张表:

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 子句

标签: sql oracle


【解决方案1】:
UPDATE room SET price = price * 1.05
WHERE hotelNo in (SELECT hotelNo FROM hotel WHERE hotelName = 'Hyde Park');

【讨论】:

    【解决方案2】:

    问题是,您不是在任何地方SELECTing 表 HOTEL。

    1. 您可以使用如下内部查询:FIDDLE

      UPDATE ROOM SET PRICE = PRICE * 1.05
      WHERE
      HOTELNO = (  
              SELECT  HOTELNO 
              FROM HOTEL
              WHERE
              HOTELNAME = 'Hyde Park'
           )
      
    2. 另一种使用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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多