有人可以帮助解决SQL问题吗? 我有一个查询,它当前接受一个外部参数,该参数可以为null或单个值,例如'STR1'。
这由以下格式的查询处理:
select a.refe_id from a, b, c
where a.owln_code = c.code
and c.con_id = b.pers_id
and b.con_abbrv = nvl(:PARAM, b.con_abbrv)
and a.status = '01'
将来外部参数可以有一个值,null或由管道分隔的多个值,例如STR1 | STR2 | STR3 |
我现在处于下面的阶段以适应这个但是已经失去了nvl测试,如果参数为null,则允许匹配表b中的所有行。 有人可以帮忙解决这个问题吗?我在网上搜索并试图自己做。非常感谢提前。
select a.refe_id from a, b, c
where a.owln_code = c.code
and c.con_id = b.pers_id
and regexp_like(:PARAM, '(^|)' || b.con_abbrv|| '(|$)')
and a.status = '01'
答案 0 :(得分:0)
我建议这样的事情:
select a.refe_id from a, b, c
where a.owln_code = c.code
and c.con_id = b.pers_id
and (:PARAM IS NULL OR regexp_like(:PARAM, '(^|)' || b.con_abbrv|| '(|$)'))
and a.status = '01'
不相关,但我还建议使用显式连接语法:我认为你会发现它使查询更容易阅读,因为它将JOIN逻辑与WHERE逻辑分开:
select a.refe_id from a
join c on a.owln_code = c.code
join b on c.con_id = b.pers_id
where (:PARAM IS NULL OR regexp_like(:PARAM, '(^|)' || b.con_abbrv|| '(|$)'))
and a.status = '01'