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

推薦する

WeChat アプレットのカスタム下部ナビゲーション バー コンポーネント

この記事の例では、WeChatアプレットの下部ナビゲーションバーコンポーネントの具体的な実装コードを...

mysql トリガーの作成と使用例

目次トリガーとは何かトリガーを作成するMySQL 作成構文のキーワードの説明: 1. MySQL ト...

MySQL 文字セットの変更に関する実践的なチュートリアル

序文: MySQL では、システムが多くの文字セットをサポートしており、異なる文字セット間にはわずか...

CSS スタイルを使用して表のフォントを垂直中央に配置する方法

CSS スタイルを使用して表内のフォントを垂直方向に中央揃えする方法は次のとおりです。下図のようなカ...

ウェブページのエンコードにおける GB2312、GBK、UTF-8 の違い

まず、GB2312、GBK、UTF-8 はすべて文字エンコーディングであることを理解する必要がありま...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

Nodejsはgitee実装コードに自動的に同期するドキュメント同期ツールを作成します

本来の意図このツールを作った理由は、コンピューターを使用しているときにいつでも毎日の仕事や生活を記録...

CentOSはローカルyumソース/Alibaba Cloud yumソース/163yuanソースを設定し、yumソースの優先順位を設定します。

1. Centosイメージを使用してローカルのyumソースをビルドするCentOS をインストール...

Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...

Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

目次序文グラフィックドライバーをインストールするCUDAをアンインストールするCUDAをインストール...

MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策

序文同社の開発者は、データの更新時に replace into ステートメントを使用していました。不...

Linux の圧縮および解凍コマンドの紹介

目次一般的な圧縮形式: gz .bz2 .xz .zip一般的に使用されるアーカイブは圧縮を必要とす...

Docker を使って LEMP 環境を素早く構築する方法の例

LEMP(Linux + Nginx + MySQL + PHP)は、基本的に今日のWeb開発者にと...

Dockerfile を使用して Java ランタイム環境のミラーを作成する方法

現在の環境は次のとおりです。セントロス7.5 docker-ce 18.06.1-ce 1. まずc...

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...