[ Oracle SQL ] UNION 句を記述する際のプログラミングテクニック

Pocket

SQL の where 句を where 0=0 で書き出して以降の条件をすべて and id = 10 のように and から書き出すようなプログラミング上のテクニックがありますが、ここでは union 句に拡張してみたいと思います。

スポンサーリンク

Where 0 = 0

プログラミング上のテクニックの1つとして、常に and から記述するようにすることで不具合の混入を防ぐことに役立ちます。下記はあくまでもイメージです。

select
    *
from
    table1
where 0 = 0  // 0 = 0 で常に真となるので、以降の条件は and から書き出すことができる
 if( 条件1 ) {
    and col1 = 2
 }
 if( 条件2 ) {
    and col2 = "さよなら哀愁"
 }

UNION 句に拡張する

上記のテクニックを UNION 句に拡張したサンプルコードが次の通りです。条件がすべて偽の場合でもレコードなしとして、特別な分岐処理を記述する必要がなくなります。

select
    *
from (
   (
     /*
      * カラム定義は返すが、条件が必ず偽となりレコードは返さない
      * 以降、UNIONで結合させる場合には、すべて同様の記述方法をとれる
      * 
      * ※ UNIONを使用する場合は、最初のカラム名のみが有効で2つめ以降のカラム名は無視される
      */
     select
       null as name,
       null as power
     from
       dual
     where 0=1
   )

 if(何らかの条件1) {
   UNION
   (
     select 
       name,
       power
     from
       tbl_japan
   )
 }
 if(何らかの条件2) {
   UNION
   (
     select 
       name,
       power
     from
       tbl_america
   )
 }
)
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>