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

推薦する

ウェブサイトデザインに関するヒント

実は、最近はウェブデザインについてよく耳にするようになりました。インターネット業界は今とても発展して...

JavaScript フロー制御 (分岐)

目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

タブ切り替え機能を実装するJavaScriptカスタムプラグイン

この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

CSSマスクのフルスクリーン中央揃えを実装する方法

具体的なコードは次のとおりです。 <スタイル> #トーストローダーフルスクリーン{ 高さ...

Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...

MySQL 5.7.17 winx64 のインストールと設定方法のグラフィックチュートリアル

Windows インストール mysql-5.7.17-winx64.zip メソッド レコード &...

Vue が scss (mixin) をグローバルに導入

目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...

Windows でのシンプルな Mysql バックアップ BAT スクリプトの共有

序文この記事では、Windows で Mysql をバックアップするための簡単な BAT スクリプト...

MySQL で group by を使用すると常にエラー 1055 が発生します (推奨)

MySQL で group by を使用すると常にエラー 1055 が発生するため、原因を確認する...

MySQL レプリケーション問題の 3 つのパラメータの分析

目次01 sql_slave_skip_counter パラメータ02 スレーブスキップエラーパラメ...

17の広告効果測定の解釈

1. 広告の 85% は未読です<br />解釈: 成功する広告の 15% にどうやって...

Tomcatのデフォルトプログラム公開パスの使用と変更についての説明

tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...

マウスが画像のハイパーリンク上を通過するときに画像のサイズ(幅、高さ)を変更する CSS

マウスが画像の上を通過したときに画像のハイパーリンクを変更する方法:コードをコピーコードは次のとおり...

Dockerコンテナでyumを呼び出すときのエラーの解決方法

dockerfile またはコンテナ内で yum を実行すると、エラーが報告され、ソースが見つかりま...