実際、BIRT レポートでこの種のものが使用されているのを見たことがあります。BIRT ランタイムに渡されるクエリの形式は次のとおりです。
select a,b,c from t where a = ?
そしてその '?' 実行時に、ドロップダウン ボックスから選択された実際のパラメータ値に置き換えられます。ドロップダウンの選択肢は次のとおりです。
select distinct a from t
union all
select '*' from sysibm.sysdummy1
すべての可能な値と " *
" を取得します。ユーザーが*
ドロップダウン ボックスから " " を選択した場合 (a のすべての値を選択する必要があることを意味します)、クエリを実行する前に (Javascript で) 変更する必要があります。
「?」以来 は位置パラメータであり、他のことが機能するためにそこにとどまる必要があります。Javascript はクエリを次のように変更します。
select a,b,c from t where ((a = ?) or (1==1))
これにより、基本的に where 句の影響がなくなりますが、位置パラメータはそのまま残ります。
SQL クエリを動的に作成する際に、レイジー コーダーが使用する AND ケースも見てきました。
andで始まるクエリを動的に作成する必要があるとselect * from t
します。
最初に WHERE を追加し、その後に AND を追加する人もいます。
select * from t where name = 'Bob' and salary > 20000
怠惰なプログラマー (それは必ずしも悪い特徴ではありません) は、追加された条件を区別せず、最初からselect * from t where 1=1
AND 句を追加し、その後に追加します。
select * from t where 1=1 and name = 'Bob' and salary > 20000