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属性の使い方を理解する

推薦する

経験豊富な人が、プロフェッショナルで標準化されたMySQL起動スクリプトの開発方法を紹介します。

シェル スクリプト言語は、すべてのプログラミング言語の中で最も単純な言語であるため、資格のある Li...

uni-app で scss を使用するサンプル コード

遭遇した落とし穴私は午後中ずっと、uni-app で scss を使用する際の落とし穴を解決すること...

MySQL で 2 つのデータベース テーブル構造を比較する方法

開発およびデバッグのプロセスでは、新しいコードと古いコードの違いを比較する必要があります。比較には、...

Webデザインチュートリアル(8):Webページの階層と空間デザイン

<br />前回の記事:Webデザイン講座(7):Webページ制作の効率化1:必要な小言...

Vue でルーティング遷移効果を実装する 4 つの方法

Vue ルーター トランジションは、Vue プログラムにパーソナライズされたエフェクトをすばやく簡単...

ネイティブ JavaScript でオブジェクトが空かどうかをチェックする実装例

目次ネイティブJavaScriptとはA. 新しいブラウザでnullオブジェクトをチェックするコンス...

1 つの記事で Nginx ロケーション マッチングの実装を理解する

チームはフロントエンドとバックエンドを分離しているため、フロントエンドが Nginx とノード層を引...

MySQLクエリ文の実行プロセスの詳細な説明

目次1. クライアントとサーバー間の通信方法2. クエリキャッシュ3. クエリ最適化処理4. クエリ...

vscodeを使用してReact Native開発環境を構築する方法を教えます

質問コードにはプロンプトがありません: RN 開発に不慣れな、フロントエンド以外の学生の多くは、「ど...

Ubuntu 20.04にvncserverをインストールする方法

Ubuntu 20.04は2020年4月に正式にリリースされました。本日、ミラーシステムを正式にイン...

img タグの src 属性値が空の場合の 2 つのリクエストの問題 (IE 以外のブラウザ)

img src 値が空の場合、リクエストが 2 つ行われます。一部の学生は以前に同様の状況に遭遇した...

Vue+Springbootでインターフェースシグネチャを実装するためのサンプルコード

1. 実装のアイデアインターフェース署名の目的は、リクエストパラメータが改ざんされていないか、リクエ...

React.js フレームワーク Redux 基本ケースの詳細な説明

react.js フレームワーク Redux https://github.com/reactjs/...

Tencent Cloud Serverをゼロから導入する方法

初めての投稿ですので、間違いや問題点などありましたら、コメント欄で指摘していただければ、今後改善させ...

HTML での一般的なリダイレクト接続の例コード

コードをコピーコードは次のとおりです。 window.location.href="zcb...