1

我正在尝试将查询结果添加到现有表的列中。到目前为止,下面的查询计算CAR_PRICE并显示该值。但是,我想将此值添加到CAR_PAYMENT_TBLcar_price 列中。

下面的创建表命令显示了相关表以及它们之间的关系。是否可以更新 中的CAR_PRICECAR_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)
);
4

2 回答 2

4

您不能在 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 实际上是一个绑定变量,而不是两个表的连接条件)。

于 2013-03-21T11:54:32.133 回答
0

If you want to update all the records of CAR_PAYMENT_TBL based on the values of ROOM_TBL then

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)

If you want to update only specific record of CAR_PAYMENT_TBL then

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;
于 2013-03-21T12:03:34.303 回答