我有两张桌子:
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
是无效的标识符。
这就是为什么?我怎么能完成我的任务?
答案 0 :(得分:2)
UPDATE room SET price = price * 1.05
WHERE hotelNo in (SELECT hotelNo FROM hotel WHERE hotelName = 'Hyde Park');
答案 1 :(得分:1)
问题是,你不是SELECT
任何地方的餐桌。
您可以使用内部查询,如下所示: FIDDLE
UPDATE ROOM SET PRICE = PRICE * 1.05
WHERE
HOTELNO = (
SELECT HOTELNO
FROM HOTEL
WHERE
HOTELNAME = 'Hyde Park'
)
使用连接的另一种方法(未经测试,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';