トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-299 ミニミニ予約システムその2
SQLパズル
部屋テーブル
部屋ID 許容人数
------ --------
101 1
102 1
103 1
104 1
201 2
202 2
仮予約テーブル
予約ID 到着予定日 出発予定日 予約人数 予約完了フラグ キャンセルフラグ
------ ---------- ---------- -------- -------------- ----------------
1 2003/08/01 2003/08/03 2 Y null
2 2003/08/02 2003/08/03 2 Y null
3 2003/08/03 2003/08/04 2 Y null
4 2003/08/01 2003/08/04 2 null null
5 2003/08/04 2003/08/08 3 Y null
6 2003/08/04 2003/08/08 1 Y null
予約状況テーブル
予約ID 部屋ID 到着予定日 出発予定日
------ ------ ---------- ----------
1 201 2003/08/01 2003/08/03
2 202 2003/08/02 2003/08/03
3 201 2003/08/03 2003/08/04
4 101 2003/08/01 2003/08/04
4 102 2003/08/01 2003/08/04
5 201 2003/08/04 2003/08/08
5 101 2003/08/04 2003/08/08
6 102 2003/08/04 2003/08/08
予約のキャンセルが発生したら、キャンセルフラグを'Y'にした上で予約状況から削除します。
さらに予約完了フラグが'Y'になっていないものがあれば
予約状況テーブルに反映する処理を再度行います。
以上の条件で、予約IDが1,2,3の予約がキャンセルされた場合の処理を記述する。
データ作成スクリプト
前のSQLパズルのデータ作成スクリプトとPL/SQLです
SQL
update 仮予約 set キャンセルフラグ = 'Y'
where 予約ID in(1,2,3);
delete from 予約状況 a
where exists(select 1 from 仮予約 b
where b.キャンセルフラグ = 'Y'
and b.予約ID = a.予約ID);
前のSQLパズルの無名PL/SQLブロックを実行
(ただし、予約完了フラグとキャンセルフラグを見る必要がある)
解説
基本的なupdate文とdelete文となります。