画面の検索条件がnullの時、その条件をsqlの検索条件として投げたくない
画面の検索条件がnullの時、その条件をsqlの検索条件として投げたくない
画面の入力フォームのいくつかを条件にDB検索を行うのですが、入力フォームに入力されていない条件もべた書きのsqlでは検索条件に入れて検索してしまうのですが、
入力フォームから入力された条件だけでsqlを投げる方法はありますでしょうか。
かつそれをsql外の処理で実行したいです。
sql内にcase when null ~
などのように書くのではなく、sql外での方法はありますでしょうか。
以下一部省略したコードです。
input.~が画面から入力されてきた値です。
該当するソースコード
const parm_list = {
jsCd: `${String(input.search_cd_object.js_cd)}%`,
// 区分名称
jsMeisho: `%${String(input.search_cd_object.js_meisho)}%`,
// コード値
jsVal: `${String(input.search_cd_object.js_val)}%`,
// コード値名称
jsCdMeisho: `%${String(input.search_cd_object.kbn_js_meisho)}%`,
};
const sql_list =
SELECT
kb.js_cd,
kb.js_meisho,
kb.js_val,
kb.kbn_js_meisho
FROM
mt_kb_js kb
WEHER
kb.js_cd LIKE :jsCd
AND kb.js_meisho LIKE :jsMeisho
AND kb.js_val LIKE :jsVal
AND kb.kbn_js_meisho LIKE :jsCdMeisho
例えば、
べた書きのSQL内にCASEなどを使って、入力フォームから入力が無かった場合の項目をsqlの条件にしないという方法もありますが、
入力されていない項目をsqlの検索条件にしないという処理をsql外で書くにはどうしたらよいでしょうか。
以下、自分で、バインド変数の中にバインド変数を入れようとしたものですが、うまく行きません。
自分で試してみたこと
const nullkbnCd = String(input.search_cd_object.js_cd);
let sqljsCd = null;
if (nulljsCd != null) {
sqljsCd = `kb.js_cd LIKE :jsCd`;
}
const param = {
coCd: Constant.CO_CD_AB,
sqljsCd: sqljsCd,
// 区分コード
jsCd: `${String(input.search_cd_object.js_cd)}%`,
// 区分名称
jsMeisho: `%${String(input.search_cd_object.js_meisho)}%`,
// コード値
jsVal: `${String(input.search_cd_object.js_val)}%`,
// コード値名称
jsCdMeisho: `%${String(input.search_cd_object.kbn_js_meisho)}%`,
//購買事業場管理マスタ最大取得件数
MT_KB_CD_MAXLIMIT: Constant.MT_KB_CD_MAXLIMIT,
};
const sql = `
SELECT
COUNT(*) AS ct
FROM
mt_kb_cd kb
WHERE
AND :sqljsCd
AND kb.js_meisho LIKE :jsMeisho
AND kb.js_val LIKE :jsVal
AND kb.kbn_js_meisho LIKE :jsCdMeisho
`;