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 アクセスを実現する

推薦する

Docker コンテナのマウントディレクトリ操作の表示

Dockerコンテナのマウントディレクトリ情報のみを表示する docker 検査 --format ...

CentOS 8.0.1905 は ZABBIX 4.4 バージョンをインストールします (検証済み)

Zabbix サーバー環境プラットフォームバージョン: ZABBIX バージョン 4.4システム:...

vue3.0 で要素を使用するための完全な手順

序文: vue3.0の要素フレームワークを使用します。要素はvue2.0をサポートしており、vue3...

インライン要素とブロック要素とは何ですか?

1. インライン要素はコンテンツの幅のみを占めますが、ブロック要素はコンテンツの量に関係なく行全体を...

ウェブサイト上で flv/MP4 やその他のビデオ ファイルを再生できない問題は、MIME タイプに関連しています。

ウェブサイトを作成している際に、flv や MP4 形式などのビデオ ファイルはローカルでは正常に再...

divの背景を透明に設定する方法の例

div の背景を透明にする一般的な方法は 2 つあります。 1. 不透明度属性を 0 ~ 1 の値に...

MYSQLはUnionを使用して2つのテーブルのデータを結合し、表示します。

UNION演算子の使用union : 2 つ以上の SELECT ステートメントの結果を 1 つの...

2つのLinuxサーバー間でファイルとフォルダを転送する手順

今日、私はプロジェクトの移行の問題に取り組んでいましたが、突然、大量の写真をどうやって移動したらよい...

MySQL でテーブルを削除する 3 つの方法 (要約)

ドロップテーブルドロップはテーブル情報を直接削除するため、最も高速ですが、データを取得することはでき...

React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法

1. 構造部品1. フォームには、入力コントロール、標準フォーム フィールド、ラベル、ドロップダウン...

入力タイプとは何を意味し、入力を制限する方法

入力を制限する一般的な方法1. ボタンが押されたときに点線のボックスを消すには、入力に属性値hide...

ウェブページをデザインする際に注意すべきいくつかの問題

Web デザインは、個人の好みや Web ページの内容に応じて、デザインのレイアウトが常に変化します...

Ubuntu 向け VMware Tools のインストールと構成のチュートリアル

以前、ブロガーは VMware 仮想マシンに Ubuntu システムをインストールしました。まだイン...

MySQLで指定した時間前にレコードを自動的に削除する方法

イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...

SecureCRT に基づくリモート Linux ホストへのファイルのアップロードとダウンロードのグラフィカルな手順

wget や curl ツールを使用して、Linux サーバーで大規模なネットワーク ファイルを直接...