Oracle SQL中update语句中的无效标识符

时间:2014-08-05 04:48:01

标签: sql oracle

我有两张桌子:

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是无效的标识符。 这就是为什么?我怎么能完成我的任务?

3 个答案:

答案 0 :(得分:2)

UPDATE room SET price = price * 1.05
WHERE hotelNo in (SELECT hotelNo FROM hotel WHERE hotelName = 'Hyde Park');

答案 1 :(得分:1)

问题是,你不是SELECT任何地方的餐桌。

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

    UPDATE ROOM SET PRICE = PRICE * 1.05
    WHERE
    HOTELNO = (  
            SELECT  HOTELNO 
            FROM HOTEL
            WHERE
            HOTELNAME = 'Hyde Park'
         )
    
  2. 使用连接的另一种方法(未经测试,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;
    

答案 2 :(得分:0)

 UPDATE room ,hotel SET price = price * 1.05
 WHERE room.hotelNo = hotel.hotelNo AND hotel.hotelName = 'Hyde Park';