2017-10-18 17 views
1

2つのフィールドが一致しないすべての行をプルしようとしています。私はnullsが本質的に "未知数"なので、nullsを0と定義するための措置をとったことを理解しています。以下のように。NULLとINTとの比較

Select ifnull(field1, 0), ifnull(field2, 0) 
from table 
where field1 != field2 

これはなぜ機能しないのですか?私はまだifnull(field1、0)で "0"としてnullsを定義していると感じていますが、結果は得られません。

答えて

2

これは、NULLの値がリレーショナルデータベースでどのように機能するためですか?ほぼすべての比較がNULLを返します。これはfalseとして扱われます。

また、SELECTで行ったことはWHEREには影響しません。フィールドはまだ元のテーブルから来ています。

あなたができることはもっと重要です。代わりにする必要がありますが

を選択する前に0が後に挿入されていませんので

where not field1 <=> field2 
+0

私はこの比較が気に入っています正直 – mrateb

+0

ありがとう - 私はこの解決策を今朝見つけましたが、それは仕事をしませんでした。明らかに私は間違ったこともしました!これは素晴らしい解決策であり、私の理解をクリアしました!再度、感謝します。 –

+1

@mrateb。 。 。 ANSI標準演算子は 'IS DISTINCT FROM'です。 –

0

Select * from 
((Select *,ifnull(field1, 0) new_field1, ifnull(field2, 0) new_field2 
from table) As query) 
WHERE new_field1 != new_field2; 
0

あなたはIFNULLを移動する必要があります(最も簡単な方法は、NULL -safe比較を使用することです)以下のようにWHERE節に移動します:

Select ifnull(field1,0) as 'Field1', ifnull(field2, 0) as 'Field2' 
from table 
where ifnull(field1,0) != ifnull(field2,0) 
+0

ifnull()を選択すると、その結果を "書き直す"だけです。 - WHERE句には入りません。 - そのため、代わりにWHERE句でそれを行う必要があります。私はSELECTとWHERE節の両方でこれを行いました。実際に比較してみると分かります。 :-) – MadsBinger

関連する問題