2013-03-21 3 views
1

내 쿼리의 결과를 기존 테이블의 열에 추가하려고합니다. 아래의 쿼리는 CAR_PRICE을 계산하고 값을 표시합니다. 그러나이 값을 car_price 열의 CAR_PAYMENT_TBL에 추가하려고합니다.쿼리 결과를 사용하여 테이블 업데이트

아래의 create table 명령은 관련 테이블과 테이블 간의 관계를 보여줍니다. CAR_PAYMENT_TBLCAR_PRICE 값을 업데이트 할 수 있습니까?

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

사용을 고려하시기 바랍니다 다음 CAR_PAYMENT_TBL의 특정 레코드를 업데이트 할 경우의 값을 기준으로 CAR_PAYMENT_TBL의 모든 레코드를 업데이트하려면 join을 사용하여 업데이트를 작성하십시오 (이 하위 쿼리는 하나의 행만 반환해야합니다. & ticket_no를 사용하고 있기 때문에 괜찮을 것입니다). 다음으로,'SET CAR_PRICE = (SELECT [your previous statement]);을 써야합니다. – Najzero

+0

room_tbl과 car_payment_tbl은 어떻게 관련이 있습니까? –

+0

일부 조인이 누락되었습니다 ... – haki

답변

4

당신은 오라클에서 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는 실제로 두 테이블에 대한 조인 조건이 아니라 바인드 변수 임).

0

당신은 다음 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) 

당신이

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; 
+0

관련된 테이블 간의 관계로 인해 이러한 쿼리가 작동하지 않습니다. 관련 테이블의 스키마를 제공했습니다. – user1909680

+0

내 게시물을 편집했습니다. 스키마를 고려하여이 업데이트를 수행하는 다른 방법이 있습니까? – user1909680

관련 문제