1

クエリの結果を既存のテーブルの列に追加しようとしています。これまでのところ、以下のクエリはを計算しCAR_PRICEて値を表示します。CAR_PAYMENT_TBLただし、この値をcar_price列のに追加したいと思います。

以下のcreatetableコマンドは、関連するテーブルとそれらの間の関係を示しています。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)
);
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 は実際にはバインド変数であり、2 つのテーブルの結合条件ではないと仮定します)。

于 2013-03-21T11:54:32.133 に答える
0

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