SELECTの結果に元の表に無いレコードやNULLのレコードを差し込む

プログラミング
スポンサーリンク

単純に元テーブルへINSERTしようとする方法もあるけど大抵はNOT NULL制約がどこかに入っているのでNG。

ということで本題に入ります。

元のSELECT文

なんてことは無いSELECT文

SELECT RIDER_NO,RIDER_NAME,TEAM
  FROM TBL_MOTOGP_RIDER
 WHERE TEAM = 'REPSOL HONDA';

番号、名前、チーム名を持っているテーブルへチーム名でSELECTをかける。

結果イメージはこんな感じ

RIDER_NORIDER_NAMETEAM
93Marc Marquez REPSOL HONDA
99Jorge LorenzoREPSOL HONDA

NULL行を差し込む

UNION ALLでDUAL表を繋ぐ

SELECT RIDER_NO,RIDER_NAME,TEAM
  FROM TBL_MOTOGP_RIDER
 WHERE TEAM = 'REPSOL HONDA'
 UNION ALL
       (SELECT null,null,null
          FROM DUAL);
RIDER_NORIDER_NAMETEAM
93Marc Marquez REPSOL HONDA
99Jorge LorenzoREPSOL HONDA
nullnullnull

元の表に無いレコードを差し込む

UNIONでnull部分をベタ打ちすれば解決

SELECT RIDER_NO,RIDER_NAME,TEAM
  FROM TBL_MOTOGP_RIDER
 WHERE TEAM = 'REPSOL HONDA'
 UNION ALL
       (SELECT 30,
               'Takaaki Nakagami',
               'REPSOL HONDA'
          FROM DUAL);
RIDER_NORIDER_NAMETEAM
93Marc Marquez REPSOL HONDA
99Jorge LorenzoREPSOL HONDA
30Takaaki NakagamiREPSOL HONDA

まとめ

DUAL表をUNIONするのは応用が効くので覚えとくと良いかも。

が、こんなことすることを迫られているようなら、そもそも設計を見直した方が絶対に良くなる。

10年戦士どころか四半世紀動いているようなレガシーシステムの改修に遭遇するとそうも言ってられないけど。

コメント

タイトルとURLをコピーしました