MySQLのNOT INピットの列はnullの問題解決です。

1020 ワード

前の時間に会社で小さな機能をした時、ある状況を統計して、いくつかのデータがありました。そして、修正した問題はとても簡単です。次のようなSQLを書きました。

SELECT COUNT(*) FROM t1 where tl.c1 not IN (SELECT t2.c1 FROM t2);
予想される結果は、t 1の中にいくつかのデータがあり、同時にt 2にないということです。結果として、0、つまりt 1の中のデータはすべてt 2にありますが、t 1の中にはt 2にないデータがあります。だから、このSQLは見ても大丈夫です。調べたところ、t 2のc 1フィールドにはnull値が含まれていたので、次のような2つの形に修正すると予想される結果が得られます。

SELECT COUNT(*) FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c1 WHERE t2.c1 IS NULL OR t2.c1 = '';
または

select COUNT(*) from t1 where t1.c1 not in (
select t2.c1 from t2 where t2.c1 is not null AND t2.c1 != ''
);
したがって、nullによって引き起こされたものです。なぜならば、not inの実現原理は、各t.11とt 2.1(括弧内の照会結果)を等しく比較しないことです。

foreach c1 in t2:
if t1.c1 != c1:
continue
else:
return false
return true
SQLの中で任意nullの演算結果はすべてfalseですので、t 2にnullが存在すると、not inのクエリーはいつまでもfalseに戻ります。つまり、検索結果は空です。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。