[英]Update table using query result
我试图将我的查询结果添加到现有表的列中。 到目前为止,下面的查询计算CAR_PRICE
并显示该值。 不过,我想这个值添加到CAR_PAYMENT_TBL
在car_price列。
下面的create table命令显示了相关的表以及它们之间的关系。 是否可以更新CAR_PRICE
中的CAR_PAYMENT_TBL
值?
SELECT C.TICKET_NO,
C.REG_ID,
C.BOOKING_ID,
(R.END_DATE-R.START_DATE) AS DAYS_STAYED,
(R.END_DATE-R.START_DATE)*5 AS CAR_PRICE
FROM CAR_TBL C
LEFT JOIN
ROOM_TBL R
ON C.BOOKING_ID = R.BOOKING_ID;
表格模式:
CREATE TABLE CAR_PAYMENT_TBL
(
TICKET_NO INT NOT NULL PRIMARY KEY,
CAR_PRICE NUMERIC(5,2)
);
CREATE TABLE CAR_TBL
(
REG_ID VARCHAR2(7) NOT NULL PRIMARY KEY,
TICKET_NO INT NOT NULL references CAR_PAYMENT_TBL(TICKET_NO),
BOOKING_ID INT NOT NULL references BOOKING_TBL(BOOKING_ID)
);
CREATE TABLE ROOM_TBL
(
STAY_NO INT NOT NULL PRIMARY KEY,
ROOM_NO VARCHAR2(4) NOT NULL references ROOM_DETAILS_TBL(ROOM_NO),
START_DATE DATE NOT NULL,
END_DATE DATE NOT NULL,
BOOKING_ID INT NOT NULL references BOOKING_TBL(BOOKING_ID)
);
您不能在Oracle的UPDATE语句中引用其他表 - 使用子查询或MERGE语句:
UPDATE CAR_PAYMENT_TBL
SET CAR_PRICE =
(select (ROOM_TBL.END_DATE - ROOM_TBL.START_DATE)*5 from room_tbl where ... )
WHERE CAR_PAYMENT_TBL.TICKET_NO = &TICKET_NO;
您还必须为子查询提供合理的WHERE子句(假设&TICKET_NO实际上是绑定变量,而不是两个表的连接条件)。
如果您想更新的所有记录CAR_PAYMENT_TBL
基础上的价值ROOM_TBL
然后
UPDATE CAR_PAYMENT_TBL
SET CAR_PRICE = (select (ROOM_TBL.END_DATE – ROOM_TBL.START_DATE)*5
FROM ROOM_TBL WHERE CAR_PAYMENT_TBL.TICKET_NO = ROOM_TBL.TICKET_NO)
如果您只想更新CAR_PAYMENT_TBL
特定记录
UPDATE CAR_PAYMENT_TBL
SET CAR_PRICE = (select (ROOM_TBL.END_DATE – ROOM_TBL.START_DATE)*5
FROM ROOM_TBL WHERE CAR_PAYMENT_TBL.TICKET_NO = ROOM_TBL.TICKET_NO)
where CAR_PAYMENT_TBL = &ticket_num;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.