5

where句の小さな部分を除いて、うまく機能している長いPL/SQLがあります。

1行が返されるはずですが、where句がチェックするフィールドがnullであるため、基準を満たしているにもかかわらず行が返されません。

私はここで非常に良いメモを読みました:
http://jonathanlewis.wordpress.com/2007/02/25/not-in/

Null が NOT IN ステートメントにどのように影響するかを説明しており、NOT LIKE についても同じだと思います。

私が見つけることができなかったのは、必要な同等の代替品です。どういうわけかこれを IN と LIKE に切り替えるか、NUll の場合に行を返すために何かを提供する必要がありますか?

これが私のコードの簡略版です。

SELECT * FROM Temp_Table T
WHERE -- Other where constraints
AND (T.Col_One NOT LIKE 'AString'
     OR T.Col_Two NOT IN ('BString','CString'))

私の状況では、行の Col_One と Col_Two の両方に null があります。

どんな助けでも大歓迎です。

ありがとう。

4

4 に答える 4

8

これを試して:

AND (NVL(T.Col_One,'NuLl') NOT LIKE 'AString'
      OR NVL(T.Col_Two,'NuLl') NOT IN ('BString','CString')) 
于 2012-06-26T20:41:16.607 に答える
5

このようなものが動作するはずです:

T.Col_One IS NULL OR T.Col_One NOT LIKE 'AString'
OR T.Col_Two IS NULL OR T.Col_Two NOT IN ('BString','CString')

その点に注意してください...

T.Col_Two NOT IN ('BString','CString') 

...と同等です...

T.Col_Two <> 'BString' AND T.Col_Two <> 'CString'

... T.Col_Two が NULL の場合、これは NULL に「崩壊」します。

于 2012-06-26T20:42:48.607 に答える
2

慣例により、 NULLis not likeor equal to any - 唯一の有効なテストはIS NULLtrue を返すものです。

于 2012-06-26T20:43:14.850 に答える
1

次のOracleドキュメントでNVL関数を確認してください:http: //docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm

于 2012-06-26T22:03:06.410 に答える