0

我有一个主键为 的表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。

4

3 回答 3

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 参数。

这也将允许以某种方式处理或记录提供两个参数的情况。

于 2012-09-20T02:35:05.977 回答
0

I would usually identify which one of the parameters has precedence and structure the query something similar to:

select...
 where (
            {$claims_id} is null
            and 
            (
                {$claim_id} is null
                or
                claims.claims_id = {$claim_id}
            )
        )
    or claims.claims_id = {$claims_id}

Here the claims_id checked as a primary option and then claim_id as secondary.

于 2012-09-19T23:31:59.497 回答
0

你可以这样做:

select
.
.
 where coalesce({$claims_id},{$claim_id}) is null 
    or coalesce({$claims_id},{$claim_id}) = claim_id
于 2012-09-19T23:51:34.977 回答