2013-03-21 5 views
0

열의 값을 계산하고이 값을 테이블로 업데이트하는 쿼리를 만듭니다. 이 열은 CAR_PRICE입니다. 내가 만든 쿼리는 모든 값을 업데이트하지만이 열의 모든 값은 동일하게됩니다. 그러나, 내 목표는 각 특정 행에 대한 값을 계산하는 것입니다.특정 행의 값을 변경하는 쿼리 업데이트

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의 각 행에 대해 다른 CAR_PRICE를 업데이트하려면이 쿼리를 개정 있습니까?

테이블 : 테이블을 수행하고 데이터 모양을

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_PIDMENT'와'CAR_TBL' 모두에'CAR_ID'가 있다고 생각합니다.'CAR_TBL'에서 어떤 행을 사용할 지 결정할 수 있습니다. 그래도 게시 된 쿼리가 작동하면 서브 쿼리가 정확히 1 행을 반환 함을 의미합니다. 당신의 의도는'c.ticket_no' 술어를 없애고 대신'CAR_PAYMENT'의'CAR_ID'를 기반으로 사용할 차를 결정할 것입니까? 이는'CAR_ID'와'TICKET_NO' 모두가'CAR_TBL'에서 유일한 키임을 의미합니까? –

+0

@JustinCave 내 게시물을 편집하고 테이블 스키마를 추가했습니다. 내가 제공 한 스키마를 고려하여 더 많은 정보를 제공 할 수 있습니까? – user1909680

+0

서브 쿼리가'ticket_no'에 대해 정확히 1 행을 반환하도록 보장합니까? –

답변

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'; 
관련 문제