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データベースの圧縮バージョンのインストールと設定に関する詳細なチュートリアル

目次1. MySQLをダウンロードする2. 圧縮パッケージを解凍する3. MySQLを初期化する4....

JavaScript プログラムのループ構造の詳細な説明

目次構造を選択ループ構造その間…しながらforループ…のために…で…の…のためにまとめループの終了壊...

UCenter ホームサイトに統計コードを追加

UCenter Homeは、ComsenzがリリースしたSNSサイト構築システムです。最新バージョン...

MySQLサブクエリの詳細な例

サブクエリの分類返された結果セットによる分類サブクエリは、返される結果セットの違いに応じて、テーブル...

MySQL の一般的な問題とアプリケーション スキルの概要

序文MySQL の日常的な開発やメンテナンスでは、パスワードの紛失やテーブルの破損など、避けられない...

MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介

非準拠データがデータベースに入るのを防ぐために、ユーザーがデータを挿入、変更、削除、その他の操作を行...

Vueデータプロキシの詳細な説明

目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...

史上最も便利な Zookeeper サーバーの構築方法 (推奨)

ZooKeeperとはZooKeeper は、分散アプリケーションに効率的で可用性の高い分散調整サ...

マウス追従ゲームを実現するjs

この記事では、マウス追従ゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内...

Vue における LocalStorage と SessionStorage の違いと使い方

目次LocalStorageとはSessionStorageとはLocalStorage と Ses...

インターフェースなしで Centos7 に JDK と Tomcat をデプロイするチュートリアル

1. xshell6をインストールする2. サーバー接続を作成し、ユーザー名とパスワードを入力します...

Dockerは公式Redisイメージをインストールし、パスワード認証を有効にします

参考: Docker 公式 Redis ドキュメント1. 特別なバージョン要件がある場合は、redi...

MySQL ビューの紹介と基本操作のチュートリアル

序文ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5...

ApacheのDjangoオンライン展開方法

環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...