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
)
}
)