2009-03-25 6 views
4

最初のテイク、その場しのぎの解決策、センチネルアプローチ(それはあなたのプログラムがセンチネル値の入力を許可してはならないことが肝要です):SQL平等/ NULL可能値と不等比較

select coalesce(a, -2147483648) = coalesce(b, -2147483648) as is_equal -- a little postgresism 

あなたがセンチネル値をブロックするために忘れてしまったとしましょうプログラム上で、ユーザーがBフィールドに-2147483648を入力し、Aがヌルです。上記のコードはtrueを報告し、falseを報告し、trueまたはnullを報告してはいけません。

nullableフィールドで平等を比較する最も簡潔な方法は何ですか? A == Bは、フィールドがNULL値であるかどうかにかかわらず、trueまたはfalseのみを報告する必要があります。

答えて

0

オペレータ< =>他のデータベースエンジンでは何をしますか?それはポストグルではないのですか?それ以外の場合は、a is null and b is null or (a is not null and b is not null and a == b)が動作するはずです。これはFALSE AND NULLFALSEであるために機能します。

+0

は、postgresql(または他のrdbmsでも問題ありません)では機能しません。そのオペレータのための幸運なmysqlの野郎: - とにかく、もしこのケースでいくつかのmysqlersのチャンスがある場合は – Hao

+0

少なくともOracleでは、通常の演算子はnull値で期待どおりに動作しません... – Thilo