興味深い発見: 合計 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 を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
>>: Net Core実装プロセス分析のDockerインストールと展開
目次1. 背景2. 複合インデックスを理解する3. 左端一致原則4. フィールド順序の影響5. 単一...
この記事では、Linux 環境で crontab コマンドを使用して、タスクの定期的な実行をスケジュ...
1. 単一行オーバーフロー1. 1 行がオーバーフローした場合、超過部分は表示されます...または、...
MVCC MVCC (Multi-Version Concurrency Control) は、マル...
まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...
目次1. はじめに2. まずLinux環境を紹介しましょう3. TIME_WAIT状態遷移図4. 継...
元の住所: http://www.webdesignfromscratch.com/web-2.0-...
文字列を動的に連結する場合、文字連結を使用することが多いです。次のような連結の引用符の意味がわかりま...
HTML5 のドラッグ アンド ドロップ機能は誰もが知っていますが、これを使用するとドラッグ アンド...
目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...
背景検索エンジンで「.htaccess キャッシュ」というキーワードを検索すると、ウェブサイトのファ...
目次1. インストール1. はじめに3. インターフェースルートアドレス4. 使用例4.1 ダウンロ...
今日、Tomcat サーバーの設定時にちょっとした問題が発生したので、参考までにいくつかご説明したい...
1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...
環境: CentOS 7公式ドキュメント: http://supervisord.org/インストー...