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

推薦する

Reactは、読み込み、読み込み完了、読み込み失敗の3つの段階の原則分析を実装します。

最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...

CSS コンテナ背景 10 色グラデーション デモ (linear-gradient())

文法 背景: linear-gradient(direction,color-stop1,color...

誰もが知っておくべきウェブサイトのユーザビリティに関する 10 のヒント

これ以上時間を無駄にせず、早速本題に入りましょう。 1. ロゴに代替テキストを追加するこれには 2 ...

MySQL最適化ソリューション: スロークエリログを有効にする

目次序文スロークエリログの設定テスト付録: ログ解析ツール mysqldumpslow要約する序文こ...

不規則な絵の滝の流れ原理の分析と応用

プロジェクトで発生した不規則な絵画壁のレイアウト問題は、次のように分析されます。 1.img dis...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

インタラクションデザインと心理学の驚くべきつながり18選

デザイナーは心理学を理解する必要があるデザイナーが知るべき心理学という本は非常に興味深いです。まず、...

nginx リバース プロキシの魔法のスラッシュについての簡単な説明

nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...

ページにスクロールバーが表示されたときに、スクロールバーがページ幅に影響しないようにする方法

本体の幅をウィンドウの幅に設定します(次のスクリプトで制御されます) $("body&qu...

HTML の表のフレームとルール属性の詳細な説明

テーブル タグの frame 属性と rules 属性は境界線の表示を制御できます。フレーム プロパ...

CSS変数を使用してダークモードを実装するためのサンプルコード

最近、WeChatはAppleによってダークモードの開発を強制されました。ますます多くのウェブサイト...

スライド階段効果を実現するjQuery

この記事では、階段スライド効果を実現するためのjQueryの具体的なコードを参考までに紹介します。具...

MySQLは、統計クエリを最適化するために、sum、case、whenを巧みに使用します。

私は最近、会社で統計レポートの開発に関わるプロジェクトに取り組んでいました。データの量が比較的多かっ...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

Web でよく使われるフォントの紹介 (iOS および Android ブラウザでサポートされているフォント)

年末なので仕事も少なくなっています。私が何もせずにいるのを見ると、上司はきっと不快に思うでしょう。そ...