2013-03-21 44 views
0

我將創建一個查詢來計算列的值並將此值更新到表中。本專欄是​​。 目前,我創建的查詢更新了所有值,但此列中的所有值都變爲相同。但是,我的目標是計算每個特定行的值。更新查詢以更改特定行的值

UPDATE CAR_PAYMENT_TBL 
    SET CAR_PRICE = 
    (SELECT 
     (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 
     WHERE C.TICKET_NO = '&TICKET_NO'); 

反正是有修改此查詢來計算值和更新的CAR_PAYMENT_TBL每個列​​的?

表:

CREATE TABLE CAR_PAYMENT_TBL 
(
    TICKET_NO INT NOT NULL PRIMARY KEY, 
    CAR_PRICE NUMERIC(5,2) 
); 

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) 
); 

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) 
); 
+1

,請問您對錶和數據的樣子。我猜測'CAR_PAYMENT'和'CAR_TBL'中有一個'CAR_ID',它可以讓你決定使用哪一行'CAR_TBL'。如果您發佈的查詢有效,但這意味着子查詢返回恰好爲1行。您的意圖可能是擺脫'c.ticket_no'謂詞,而是根據'CAR_PAYMENT'中的'CAR_ID'確定要使用哪輛車?這意味着'CAR_ID'和'TICKET_NO'是'CAR_TBL'中的唯一鍵? – 2013-03-21 20:10:01

+0

@JustinCave我編輯了我的文章並添加了表格模式。考慮到我提供的模式,是否可以提供更多信息? – user1909680 2013-03-21 20:14:35

+0

你保證你的子查詢只返回任何'ticket_no'的1行嗎? – 2013-03-21 20:36:01

回答

2
UPDATE CAR_PAYMENT_TBL T 
    SET CAR_PRICE = (
     SELECT (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 
     WHERE C.TICKET_NO = T.TICKET_NO 
    ) 
    WHERE T.TICKET_NO = '&TICKET_NO';