簡體   English   中英

使用查詢結果更新表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM