SQL文についての質問です。
なるべくレスポンスの良いクエリを考えています。
テーブルはAとBの2つあるとします。
/は各項目の区切りを表しています。
NullはNULL値(ブランク)を表しています。
【テーブルA】
オーダNo / 科目1 / 科目2 / 科目3 / 申請日 / 生徒名 / 取得区分
10001 / Jyoho / Keizai / Keiei / 20130901 / Ishii / 0
10002 / Jyoho / Keiei / Null / 20130901 / Numata / 1
10003 / Keizai / Null / Null / 20130903 / Wada / 0
【テーブルB】
オーダNo / 科目 / 取得日
10002 / Jyoho / 20130912
10002 / Keizai / 20130912
テーブルAはまだ取得日がないデータで
取得日が確定すると
テーブルAの情報をもとにテーブルB
が作成されるイメージです。
そして、出力したいデータはすべてを網羅したデータなんです!
取得区分:1の場合は、テーブルBから、0の場合はテーブルAの列持ちの
科目1~3を取得したいです。
オーダNo / 科目 / 申請日 / 取得日
10001 / Jyoho / 20130901 / Null
10001 / Keizai / 20130901 / Null
10001 / Keiei / 20130901 / Null
10002 / Jyoho / 20130901 / 20130912
10002 / Keizai / 20130901 / 20130912
10003 / Keizai / 20130903 / Null
一応作成したクエリは下記のUNIONを使ったものなんですけど
よりレスポンスが良くなるクエリがありましたら教えていただきたいです。
SELECT テーブルB.オーダNo, テーブルB.科目, テーブルA.申請日, テーブルB.取得日
FROM テーブルB INNER JOIN テーブルA ON テーブルA.オーダNo = テーブルB.オーダNo
UNION
SELECT オーダNo, 科目1, 申請日, NULL AS 取得日
FROM テーブルA AS テーブルA_3
WHERE (取得区分 = 0) AND (科目1 IS NOT NULL)
UNION
SELECT オーダNo, 科目2, 申請日, NULL AS 取得日
FROM テーブルA AS テーブルA_2
WHERE (取得区分 = 0) AND (科目2 IS NOT NULL)
UNION
SELECT オーダNo, 科目3, 申請日, NULL AS 取得日
FROM テーブルA AS テーブルA_1
WHERE (取得区分 = 0) AND (科目3 IS NOT NULL)