設定操作からMySQLへのNULLが見つからない問題を解決する

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:

合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のようになります。

#クエリステートメント1
# テーブル内で id に 'A' または 'B' または 'C' が含まれるフィールドを検索します。select * from table1 where id like '%A%' or id like '%B%' or id like '%C%';
#300 件の結果が見つかりました

まあ、クエリは正常で、300 件のレコードがあります。

次に、クエリをランダムに再度入力しました...:

#クエリステートメント2
# テーブル内で id に 'A'、'B'、または 'C' が含まれないフィールドを検索します。select * from table1 where id not like '%A%' and id not like '%B%' and id not like '%C%';
#400 件の結果が見つかりました

さて、400 個のアイテムが見つかりました... 何ですか? !たった400? ? 700個くらいあるんじゃないの? ! !

雷に打たれました。どうしたのでしょうか? ?

論理的には、「ID に 'A' または 'B' または 'C' が含まれるテーブル内のフィールドを検索する」は、「ID に 'A'、'B'、または 'C' が含まれないテーブル内のフィールドを検索する」と同じになります。これは集合演算によって決定されます!

「テーブル内のフィールドのうち、ID に「A」または「B」または「C」が含まれるフィールドを見つけます」>> 次のように考えます >> A∪B∪C

「テーブル内の ID に 'A'、'B'、または 'C' が含まれないフィールドを検索します」>> 次のように考えます >> ∁UA∩∁UB∩∁UC

しかし、演算規則によれば、∁U(A∪B∪C) = ∁UA ∩ ∁UB ∩ ∁UC であることがわかります。

つまり、2 つのクエリ ステートメントの結果は補完的であるべきではないでしょうか? ?理論的には、行の合計は 1000 になるはずですが、なぜ 300 が欠落しているのでしょうか?

それは奇妙ですね。何が悪かったのでしょうか? ?

したがって、クエリ ステートメントを変更します。

#クエリステートメント3
# テーブル内で id に 'A'、'B'、'C' が含まれないフィールドを検索します。select * from table1 where id not in (select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' );
#700 件の結果が見つかりました

はぁ? ?この方法でクエリ ステートメント 1 の補完セットを見つけるにはどうすればよいでしょうか?

クエリ ステートメント 2 とクエリ ステートメント 3 の結果を比較したところ、欠落している 300 件のレコードは id が NULL であったことがわかりました。

つまり、「%A%」とは異なり、NULL レコードを見つけることはできません。

理解した結果、次のことがわかりました。

もう一つの詳しい知識が見つかりました〜

補足: MySQLのクエリ値にnull値がある場合、返されるクエリ結果は常に空になることに注意してください。

これでデータベーステーブルは

次のクエリを使用すると:

ユーザーから*を選択
ユーザー名が 
(
ユーザー名を選択 
ユーザーから
id != 2 の場合
)

この時点では、サブクエリの結果には null 値が含まれているため、結果は常に、ID 2 の予想される行ではなく、空のクエリを返します。

クエリを少し変更することができます。

ユーザーから*を選択
ユーザー名が 
(
ユーザー名を選択 
ユーザーから
id != 2 かつユーザー名が null ではない
)

このとき、空のユーザー名列を除外することで、期待どおりの結果を得ることができます。

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

以下もご興味があるかもしれません:
  • MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?
  • MySQL で not in を使用して 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 制約のケースの説明

<<:  ハイパーリンクを開くターゲットのテスト

>>:  Net Core実装プロセス分析のDoc​​kerインストールと展開

推薦する

MySQL複合インデックスの概要

目次1. 背景2. 複合インデックスを理解する3. 左端一致原則4. フィールド順序の影響5. 単一...

Linux 環境で crontab コマンドを使用して、スケジュールされた定期的な実行タスクを設定します (PHP 実行コードを含む)

この記事では、Linux 環境で crontab コマンドを使用して、タスクの定期的な実行をスケジュ...

1 行または複数行のテキストがオーバーフローしたときに省略記号を表示する CSS を実装する方法

1. 単一行オーバーフロー1. 1 行がオーバーフローした場合、超過部分は表示されます...または、...

MySQL マルチバージョン同時実行制御 MVCC の詳細な研究

MVCC MVCC (Multi-Version Concurrency Control) は、マル...

JavaScript でローカル変数をグローバル変数に変換する方法

まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...

LinuxソースコードからTIME_WAITの期間を分析する

目次1. はじめに2. まずLinux環境を紹介しましょう3. TIME_WAIT状態遷移図4. 継...

MySQL の連結で複数の一重引用符と三重引用符を使用する際の問題

文字列を動的に連結する場合、文字連結を使用することが多いです。次のような連結の引用符の意味がわかりま...

Vueカスタムディレクティブを使用してドラッグアンドドロッププラグインを構築する方法

HTML5 のドラッグ アンド ドロップ機能は誰もが知っていますが、これを使用するとドラッグ アンド...

Vue で動的なスタイルを実現するためのさまざまな方法のまとめ

目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...

HTML 内の CSS および JS リンクのバージョン番号 (キャッシュを更新)

背景検索エンジンで「.htaccess キャッシュ」というキーワードを検索すると、ウェブサイトのファ...

Vueでaxiosをカプセル化する方法

目次1. インストール1. はじめに3. インターフェースルートアドレス4. 使用例4.1 ダウンロ...

Tomcat サーバーが tomcat7w.exe を開けない場合の解決策

今日、Tomcat サーバーの設定時にちょっとした問題が発生したので、参考までにいくつかご説明したい...

Docker実践: Pythonアプリケーションのコンテナ化

1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...

Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル

環境: CentOS 7公式ドキュメント: http://supervisord.org/インストー...