如何在SQL数据摘录操作中实现参数别名?

时间:2012-09-19 08:37:25

标签: sql aviarc

我有一个主键为claims_id的表,但由于遗留原因,我需要能够使用参数claims_idclaim_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。

3 个答案:

答案 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