0

主キーがであるテーブルがありますが、従来の理由から、パラメーターまたは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であることに注意してください。

4

3 に答える 3

3

1つのパラメーター名のみを許可するようにブローカーを調整できない場合は、2つのパラメーターの存在を確認し、必要に応じて調整する操作の事前ワークフローを用意することをお勧めします。

最も簡単な例として、

<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

私は通常、どのパラメーターが優先されるかを識別し、次のようなクエリを構成します。

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がセカンダリオプションとしてチェックされています。

于 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 に答える