Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL中update语句中的标识符无效_Sql_Oracle - Fatal编程技术网

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

Oracle SQL中update语句中的标识符无效,sql,oracle,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.h

我有两个表格:

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

问题是,你不能在任何地方选择桌子

 UPDATE room ,hotel SET price = price * 1.05
 WHERE room.hotelNo = hotel.hotelNo AND hotel.hotelName = 'Hyde Park';
  • 您可以按如下方式使用内部查询:

    UPDATE ROOM SET PRICE = PRICE * 1.05
    WHERE
    HOTELNO = (  
            SELECT  HOTELNO 
            FROM HOTEL
            WHERE
            HOTELNAME = 'Hyde Park'
         )
    
  • 另一个使用join的方法(未测试)


  • 将酒店添加到您的自clause@user3368506:更新了小提琴。请检查和投票,如果它的工作。
    UPDATE ROOM SET PRICE = PRICE * 1.05
    WHERE
    HOTELNO = (  
            SELECT  HOTELNO 
            FROM HOTEL
            WHERE
            HOTELNAME = 'Hyde Park'
         )
    
    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;