MySQL で not in を使用して null 値を含める問題を解決する

MySQL で not in を使用して null 値を含める問題を解決する

知らせ! ! !

uid が (a,b,c,null) に含まれないユーザーから * を選択します。

この SQL は結果を返しません。 not in リストに null が含まれていないようにしてください。

加えて:

– 算術演算に null が含まれる場合、算術式の値は null になります。 (例: +、-、*、/ 加算、減算、乗算、除算)

– 比較演算に null が含まれる場合、結果は false とみなされます。 (例: >=、<=、<> より大きい、より小さい、等しくない)

–集計操作に null が含まれる場合、集計関数は null に設定されます (この状況は、isnull(field,0) などのメソッドを使用することで回避できます)。 count(*)、count(1)、count(0)などを除きます(count(field)がnullの行はカウントされません)。

--not in サブクエリに null 値がある場合、データは返されません。

補足: MySQL in、not in、exists、not exists、null

Null はデータの中では不思議な存在であり、比較においても特別な存在です。以下は、in、not in、exists、not exists の判定結果に Null がどのような影響を与えるかを記録し、まとめたものです。

いくつか説明文を作ってみましょう。比較演算子の左側にあるものは左比較演算子と呼ばれ、比較演算子の右側にあるものは右比較演算子と呼ばれます。たとえば、1 in (1,2) の場合、in の左側にある 1 は左比較演算子で、in の右側にある (1,2) は右比較演算子です。

1.in

1.1 左比較演算子が null の場合、いずれの場合でも null が返されます。

mysql> (1,2) で null を選択します。
+---------------+
| (1,2) では null |
+---------------+
| NULL |
+---------------+
セット内の 1 行 (0.00 秒)

mysql> (1,2,null) で null を選択します。
+--------------------+
| (1,2,null) では null |
+--------------------+
| NULL |
+--------------------+
セット内の 1 行 (0.00 秒)

1.2 右比較記号に null が含まれている場合、左比較記号が null でなく、右比較記号に左比較記号が含まれている場合にのみ 1 を返します。それ以外の場合は null を返します。

mysql> (1,2,null) で null を選択します。
+--------------------+
| (1,2,null) では null |
+--------------------+
| NULL |
+--------------------+
セット内の 1 行 (0.00 秒)

mysql> (1,2,null) から 3 を選択します。
+-----------------+
| (1,2,null) 内の 3 |
+-----------------+
| NULL |
+-----------------+
セット内の 1 行 (0.00 秒)

mysql> (1,2,null) から 1 を選択します。
+-----------------+
| (1,2,null) 内の 1 |
+-----------------+
| 1 |
+-----------------+
セット内の 1 行 (0.00 秒)

2. 含まれていない

2.1 左比較演算子が null の場合、いずれの場合でも null が返されます。

mysql> (1,2,null) に含まれない null を選択します。
+------------------------+
| null は (1,2,null) に含まれません |
+------------------------+
| NULL |
+------------------------+
セット内の 1 行 (0.00 秒)

mysql> (1,2) にない null を選択します。
+-------------------+
| (1,2) に null はありません |
+-------------------+
| NULL |
+-------------------+
セット内の 1 行 (0.00 秒)

2.2 右比較記号に null が含まれている場合、右比較記号に左比較記号が含まれている場合は 0 を返し、それ以外の場合は null を返します。

mysql> (1,2,null) に含まれない 1 を選択します。
+---------------------+
| 1 は (1,2,null) に含まれません |
+---------------------+
| 0 |
+---------------------+
セット内の 1 行 (0.00 秒)

mysql> (2,3,null) に含まれない 1 を選択します。 
+---------------------+
| 1 は (2,3,null) に含まれません |
+---------------------+
| NULL |
+---------------------+
セット内の 1 行 (0.00 秒)

3.存在する

サブクエリが null を返す場合、Exists は true と評価されます。

mysql> 存在するものを選択します (null を選択)。
+----------------------+
| 存在する (null を選択) |
+----------------------+
| 1 |
+----------------------+
セット内の 1 行 (0.00 秒)

4. 存在しない

存在しないサブクエリは、null を返す場合は false とみなされます。

mysql> 存在しないものを選択します (null を選択)。
+--------------------------+
| 存在しない (null を選択) |
+--------------------------+
| 0 |
+--------------------------+
セット内の 1 行 (0.00 秒)

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?
  • 設定操作からMySQLへのNULLが見つからない問題を解決する
  • MySQL の null と not null、null と空の値の違いの詳細な説明''''''''
  • MySQL でテーブルを作成するときの NULL と NOT NULL の使用方法の詳細な説明
  • MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法
  • MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?
  • MySQL クエリの空のフィールドまたは空でないフィールド (null または null ではない)
  • mysql は、含まれていない、左結合、IS NULL、NOT EXISTS の効率の問題のレコードです
  • MySQL の null 制約のケースの説明

<<:  HTMLの最適化によりWebページの速度が向上

>>:  Windows に Docker と docker-compose スイートをインストールするための詳細なチュートリアル

推薦する

Docker コンテナでネットワーク リクエストが遅くなる問題の解決策

Docker の使用中に、いくつかの問題が発見されました。npm install や bundle ...

フロントエンドネットワーク、JavaScriptの最適化、開発のヒントについて簡単に説明します。

1. ネットワークの最適化YSlowには23のルールがあります。これら数十のルールは、主に、不要な...

Linux (Ubuntu 18.04) に vim エディタをインストールする方法

デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...

MySQL の DOS ウィンドウの文字化け問題を解決する方法

文字化けしたコードの問題は次のとおりです。 この問題の原因は非常に単純です。コマンドラインのエンコー...

Vue プラグイン エラー: このページで Vue.js が検出されました。問題は解決しました

Vue プラグインがエラーを報告しました: このページで Vue.js が検出されましたVueプラグ...

Docker での Jenkins と Docker を使用した継続的デリバリー

1. 継続的デリバリーとは何かソフトウェア製品の出力プロセスは、ソフトウェアがいつでもリリースできる...

IE7でソースファイルを含むページを開くとページが空白になる問題の解決方法

質問:私のブログのエンコーディングは utf-8 です。ページを開くと空白になっていることもあります...

純粋な CSS3 でペットの鶏のサンプルコードを実現

最近、CSS3に関する知識や記事をたくさん読んできましたが、CSS3はとても便利に使えると思います。...

JavaScript のモジュール性の説明

目次序文: 1. コンセプト2. モジュール化の利点3. 複数のスクリプトタグを導入した後の問題1....

スクロールバーを非表示にする HTML の簡単な実装

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

HTMLを圧縮しない理由はいくつかある

理由は簡単です。 HTML ドキュメントでは、複数の空白文字は 1 つの空白文字と同等です。つまり、...

JavaScriptコールバック関数の詳細な理解

目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...

MySQL トランザクション分析

取引トランザクションはビジネス ロジックの基本単位です。各トランザクションは一連の SQL ステート...

Vue ポーリング リクエスト ソリューションの完全な例

世論調査の理解実際、ポーリングの焦点はループ自体ではなく、実行間の間隔にあります。 Ajax は非同...

HTML ページの先頭に戻るいくつかの実装の概要

最近、ウェブサイトを開発する際にトップに戻るボタンを作成する必要がありますが、私は主にバックエンドの...