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 スイートをインストールするための詳細なチュートリアル

推薦する

MySQL で特定の日、月、または年のデータをクエリするためのコードの詳細な説明

今日 テーブル名から * を選択します。ここで、to_days(時間フィールド名) = to_day...

CentOS7におけるKVM仮想化の基本管理の詳しい説明

1. kvm仮想化をインストールする : : : : : : : : : : : : : : : :...

IE10以下のimgタグ問題の解決方法

問題を見つける以前、簡単なデモを書いたのですが、IE10以下では動作しないことがわかりました。ここに...

選択にスタイルを追加するための純粋な CSS (スクリプトなし) 実装

通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...

Ubuntu 19でdockerソースをインストールできない問題を共有する

主要な Web サイトと個人的な習慣に従って、Docker ソースを追加するには次の方法を使用します...

Dockerコンテナを作成、起動、停止する方法

1. コンテナとは、独立して実行されるアプリケーション、またはアプリケーションのグループとその動作環...

同じレベルの要素で Position:fixed と margin-top を一緒に使用する場合の CSS の問題

問題の説明CSS を使用して上部の固定効果を実現したいと思います。 margin-top と pos...

JavaScript 配列の詳細な概要

目次1. 配列誘導1. 文字列を配列に分割する2. コレクションとマップを新しい配列に変換する3. ...

jQueryは時間セレクタを実装する

この記事の例では、参考までに時間セレクターを実装するためのjQueryの具体的なコードを共有していま...

Javascript ツリー メニュー (11 項目)

1. dhtmlxツリー dHTMLxTree は機能豊富なツリー メニュー コントロールです。豊...

MySQL ストアド プロシージャの権限の問題の概要

MySQL ストアド プロシージャは、確かに、非常にまれな使用シナリオのように見えます。この問題は、...

Mac Docker x509証明書の問題を解決する

質問最近、プライベートミラーセンターにログインする必要がありましたが、ログイン時にエラーメッセージが...

RHCEはApacheをインストールし、ブラウザでIPにアクセスします

1. at は、5 時間後にルート ディレクトリの at_test ファイルに「これは at タスク...

Tomcatのクラスロードメカニズムを説明する記事

目次- 序文 - - JVM クラスローダー - 1. JVMクラスローダー2. クラスローダーのソ...

Docker 上で Redis クラスターを構築する

目次1. イメージをプルする2. Redisコンテナを作成する3. コンテナを起動するためにクラスタ...