MySQL で左結合を使用して where 条件を追加する問題の詳細な分析

MySQL で左結合を使用して where 条件を追加する問題の詳細な分析

現在の需要:

グループとファクターの 2 つのテーブルがあります。1 つのグループは複数のファクターに対応します。ここで、有効なグループとそれに対応する有効なファクターを照会します。両方のテーブルに isDel 論理削除フラグがあります。

ここに画像の説明を挿入

最初の間違い:

SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.groupId = g.id ここで、g.isDel=0 かつ f.isDel=0

LEFT JOIN キーワードは、右側のテーブル (table_name2) に一致する行がない場合でも、左側のテーブル (table_name1) のすべての行を返します。
左側のテーブルに対応するデータが右側のテーブルにない場合、 f.isDel=0のコードの問題によりクエリを実行できません。

間違った書き方:

SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.groupId = g.id かつ g.isDel=0 かつ f.isDel=0

g.isDel=0というこの書き方は有効にならず、クエリ データが正しくなくなります。

原因分析:

左結合の where 条件と on 条件に関するいくつかの知識ポイント:

  • 複数テーブルの左結合は一時テーブルを生成し、ユーザーに返します。
  • where 条件は、最後に生成された一時テーブルをフィルター処理し、where 条件を満たさないレコードを除外します。
  • オン条件は、左結合の右テーブルを条件付きでフィルタリングすることですが、左テーブルのすべての行が返され、右テーブルにない行はNULLで埋められます。
  • on 条件で左側のテーブルに制限がある場合、条件の真偽に関係なく左側のテーブルのすべての行が返されますが、右側のテーブルの一致する値は影響を受けます。つまり、左側のテーブルの制約条件は、右側のテーブルの一致するコンテンツにのみ影響し、返される行の数には影響しません。

正しい書き方:

SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.groupId = g.id and f.isDel=0 where g.isDel=0

結論は:

1. 左側のテーブルに条件付き制限を追加するには、where 条件に追加し、on の後には追加しないでください。
2. 右側のテーブルに条件付き制限を追加する場合は、on の後に配置する必要があります。where 条件に条件を追加すると、データ行の数に問題が発生します。

これで、MySQL で left join を使用して where 条件を追加する際の問題の分析に関するこの記事は終了です。MySQL left join に where を追加することに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の on と where における左結合設定条件の使用法の違いの分析
  • MySQL の左結合操作における on 条件と where 条件の違いの紹介
  • MySQL の左 (右) 結合での on と where フィルタリングの違いを分析する

<<:  docker コンペ応募でよく使われるコマンドのまとめ

>>:  CSS3のall属性の使い方を理解する

推薦する

Vue 初心者ガイド: 環境の構築と開始方法

目次初期ビューVue開発環境の構築Vueインスタンスの作成Vue テンプレート構文Vue データバイ...

我々は自らの力でIE6を絶滅に追い込んでいる

実際、IE6 が本当にいつ消滅するのか私たちは毎日疑問に思っていますが、2001 年のリリース以来、...

横スクロールウェブサイトデザインの概要

水平スクロールはあらゆる状況に適しているわけではありませんが、適切に行えば、Web サイトを他のサイ...

Windows10 での MySQL msi インストール チュートリアル (画像とテキスト付き)

1. ダウンロード1. MySQL msi 公式 Web サイトから最新のダウンロードをクリックす...

なぜ Tomcat が起動できないのでしょうか?

目次現象:ポートの使用:ファイルにスペルミスがあります:現象: Tomcat がインストールされ、W...

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

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

Linux での Python のアップグレードと pip のインストールの詳細な説明

Linuxバージョンのアップグレード: 1. まず、Linuxオペレーティングシステムに付属するPy...

Dockerコンテナのインポ​​ートとエクスポートに関するチュートリアル

背景Docker の人気は、コンテナの共有と移植が容易であることと密接に関係しています。ユーザーは、...

Filebeat を使用して Nginx ログを収集する方法

Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...

MySQL マスタースレーブの原理と構成の詳細

MySQLのマスタースレーブ構成と原理、参考までに具体的な内容は以下のとおりです。 1. 環境の選択...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

MySQL の列から行への変換のヒント (共有)

序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...

Tomcatはスレッドプールを使用してリモート同時リクエストを処理します。

Tomcatが同時リクエストを処理する方法を理解することで、スレッドプール、ロック、キュー、および...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...