MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法

MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法

以前、会社で小さな機能に取り組んでいたとき、特定の状況でデータがいくつあるかを数えてから問題を修正しました。当時は非常に単純に思えたので、次の SQL を書きました。

SELECT COUNT(*) FROM t1 where tl.c1 not IN (SELECT t2.c1 FROM t2);

期待される結果は、t1 にあって t2 にないデータがいくつあるかということです。結果は 0 で、つまり t1 のすべてのデータが t2 にあります。ただし、一部のデータが t1 にあるのに t2 にはないことは簡単にわかるので、非常に奇妙に感じます。この SQL は問題ないようです。調べてみると、t2 の c1 フィールドに null 値が含まれていることがわかりました。次の 2 つの形式に変更すると、期待どおりの結果が得られます。

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

または

t1.c1が(に含まれない)からCOUNT(*)を選択します。
t2.c1 が null ではなく、t2.c1 != '' の場合、t2 から t2.c1 を選択します。
);

つまり、すべて null が原因です (エラーを回避するために空の文字列も追加しました)。その理由は、not in の実装原則は、各 t1.c1 と各 t2.c1 (かっこ内のクエリ結果) を比較して不等 (!=) であるかどうかを確認することだからです。

c1 を t2 で繰り返し実行:
t1.c1 != c1 の場合:
続く
それ以外:
偽を返す
真を返す

SQL では、!=null のすべての演算結果は false になるため、t2 に null がある場合、not in のクエリは常に false を返します。つまり、クエリ結果は空になります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQLのNULL値の詳しい説明
  • MySQL NULL値処理例の詳細な説明
  • MySQL NULLデータ変換方法(必読)
  • MySQL の NULL 値に関する体験談と分析チュートリアルシリーズ

<<:  WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

>>:  Docker で MySQL データベースを使用して LAN アクセスを実現する

推薦する

カスタムポップアップボックスを実装するためのJavaScriptシングルトンモード

この記事では、カスタムポップアップボックスを実装するためのJavaScriptシングルトンモードの具...

JSパッケージオブジェクトに関する簡単な説明

目次概要意味インスタンスメソッドプリミティブ型とインスタンスオブジェクト間の自動変換カスタムメソッド...

M1 チップに MySQL 8.0 データベースをインストールする方法 (画像とテキスト)

1. ダウンロードまず、MySQLの国内ミラーをお勧めします。特に速いわけではありませんが、それで...

nginxの基礎を学ぶ

目次1. nginx とは何ですか? 2. nginx で何ができるのか? 2.1 フォワードプロキ...

Mysqlはマスタースレーブ構成とマルチマスターマルチスレーブ構成を実装します

現在シミュレーションしているのは、マスター スレーブ システム (ホスト 1 台とスレーブ 1 台)...

セマフォによるTomcatの異常終了の解決方法

最近はビッグデータで遊んでいます。友人が私のところに来て、オンラインの Tomcat が不可解に終了...

ApacheとTomcatによるクラスタ環境構築プロセスの分析

実際、Apacheクラスタを構築するのは難しくありません。私もインターネットで情報を見つけて自分で設...

ページスピードの最適化の概要

インターネットは人々の生活にますます欠かせないものになってきていると思います。 Ajax や fle...

Dockerはターミナルで中国語を入力できない問題を解決します

序文:ある日、DockerでMySQLサービスを構築したところ、MySQLのコマンドラインで中国語の...

1時間で学ぶMySQLの基礎

目次MySQL を使い始めるMySQL 管理6. MySQL サーバーを起動および停止します。 7....

カラーブロックレポート効果の動的な表示を実現する HTML (サンプルコード)

HTMLカラーブロックを使用してデータを動的に表示する <スタイル タイプ="te...

Linux リモート コントロール Windows システム プログラム (3 つの方法)

場合によっては、Windows システム上のプログラムを Linux 上でリモートで実行する必要があ...

Vueにおける仮想DOMの理解のまとめ

これは本質的に、ビュー インターフェース構造を記述するために使用される共通の js オブジェクトです...

言及すべき8つのMySQLの落とし穴を共有する

MySQL はインストールが簡単で、高速で、豊富な機能を備えています。これはオープンソース運動のベン...

docker cp ファイルをコピーしてコンテナに入る

実行中のコンテナに入る # コンテナに入り、新しいターミナルを開きます# docker exec -...