我有一个主键为claims_id
的表,但由于遗留原因,我需要能够使用参数claims_id
或claim_id
查找记录。我怎样才能做到这一点?我之前使用了类似以下的模式进行搜索查询:
select...
where (
{$claims_id} is null
or
claims.claims_id = {$claims_id}
)
and
(
{$claim_id} is null
or
claims.claims_id = {$claim_id}
)
...但这对我来说似乎不太合适,因为你可以为查询提供这两个参数,这没有任何意义。实现这样的目标的正确方法是什么?
这些是大型表,因此如果某人没有指定参数,则查询应该不返回任何内容。
更新:注意到有问题的数据库是DB2。
答案 0 :(得分:3)
如果无法调整代理以使其仅允许一个参数名称,那么我的建议是为操作预先设置工作流程,检查两个参数是否存在并将其调整为必要的。
最简单的例子,
<workflow>
<if test="not-equal" value1="{$parameters.claims_id}" value2="">
<then>
<set-field field="parameters.claim_id" value="{$parameters.claims_id}"/>
</then>
</if>
</workflow>
然后在查询中,您只关注claim_id参数。
这也可以允许以某种方式处理或记录两个参数。
答案 1 :(得分:0)
我通常会确定哪个参数具有优先权,并将查询结构类似于:
select...
where (
{$claims_id} is null
and
(
{$claim_id} is null
or
claims.claims_id = {$claim_id}
)
)
or claims.claims_id = {$claims_id}
此处 claims_id 已选中作为主要选项,然后 claim_id 作为次要选项。
答案 2 :(得分:0)
你可以这样做:
select
.
.
where coalesce({$claims_id},{$claim_id}) is null
or coalesce({$claims_id},{$claim_id}) = claim_id