ユーザーがデータベースからレコードを取得するインターフェイスを構築しました。ユーザーには、0 個以上のフィルターを指定するオプションがあります。A、B、C、D の 4 つのフィルターがあります (これらが特定のテーブルのフィールドであるとしましょう)
私のクエリは次のようになります。
select * from table
where (A = v1 or B = v2 or C = v3) and D = v4
クエリを作成する方法を考えていますが、特定のフィルターが指定されている場合は適用され、指定されていない場合は無視されます。しかし、これは 16 のケースすべてに当てはまるはずです。
これまでに思いついたのは、次の方法です。
select * from table
where (
(A = v1 and 1)
or (B = v2 and 1)
or (C = v3 and 1)
)
and D = v4
v1
またはその他の値が指定されていない場合は、-1 に設定されます。したがって、それらが指定されていない場合は、他のフィルター (A、B、C の中から) が使用されるため、単純に無視されます。ただし、A、B、および C のいずれも指定されていない場合、これは失敗します。その場合、false は D と Anded であり、D は適用されません。
この場合、where 句を使用する方法はありますか? 私は、コードを介して句を追加するか追加しないかで、これに対するプログラムによる解決策にもオープンですが、私はこの方法を好みます。そして、多くの if-else ステートメントを持ちたくありません。
ありがとうございました!