0

私はOacle SQLを初めて使用し、簡単に思えることを理解しようとしています...

次のような選択があるとします。

select * from MRCONTRACT2
WHERE CASE 
        WHEN ("MR_CONTRACT2"."TERM_DATE" < sysdate)
            THEN 'Lapsed Contract'
        WHEN ("MR_CONTRACT2"."EFF_DATE" > sysdate)
            THEN 'Inactive Contract'
        ELSE 'Active Contract'
        END = 'Active Contract'

where句は実際にはどういう意味ですか?私にとっては完全な「if」式にはなりませんか?

4

1 に答える 1

3

そのクエリは次と同等です

select *
  from mrcontract2
 where term_date >= sysdate
   and eff_date <= sysdate

CASE ステートメントは順番に評価されるため、いずれかの「ケース」が true の場合、それ以降のすべてのケースは無視されます。case ステートメントの結果が ELSE 句と同じかどうかを確認しているため、ステートメントは他のすべての条件の反対と同じです。

WHERE 句の CASE ステートメントはあまり好きではありませんが、ロジックを単純化する方法としては便利です。評価したいが翻訳したくない複雑な CASE ステートメントがある場合。

于 2013-10-20T12:37:06.387 に答える