ホームページ >データベース >mysql チュートリアル >3 つのテーブルで MySQL LEFT JOIN を効率的に実行するにはどうすればよいですか?

3 つのテーブルで MySQL LEFT JOIN を効率的に実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-02 22:22:39614ブラウズ

How to Efficiently Perform a MySQL LEFT JOIN with Three Tables?

3 つのテーブルを使用した MySQL LEFT JOIN について

問題の説明

次の 3 つのテーブルを考えます。名前、SS): に関する情報が含まれます。

    Fears (FearID, Fear): さまざまな恐怖をリストします。
  • person_Fear (ID, PersonID, FearID): 個人を関連する恐怖に関連付けます。
  • 目的は、すべての個人を、それに関連するあらゆる恐怖とともに表示することです (ある人が恐怖を感じていない場合も含みます)。
クエリの問題の分析

提供されたクエリは、テーブルを結合するための間違ったスキーマを示しています:

ON 句は、誤って Person_Fear テーブルに結合しようとしています。 FearID ではなく PersonID。これは Fears に接続する列です。

SELECT persons.name, 
       persons.ss, 
       fears.fear 
FROM   persons 
       LEFT JOIN fears 
              ON person_fear.personid = person_fear.fearid 
改善されました。解決策

左結合を効果的に実行するには、次のアプローチを検討してください:

説明:
SELECT Persons.Name, Persons.SS, Fears.Fear
FROM Persons
LEFT JOIN Person_Fear
    INNER JOIN Fears
    ON Person_Fear.FearID = Fears.FearID
ON Person_Fear.PersonID = Persons.PersonID

Persons テーブルは残ります。 Person_Fear.PersonID = で Person_Fear に参加しましたPersons.PersonID.

    ネストされた INNER JOIN は、Person_Fear を Person_Fear.FearID = Fears.FearID.
  • の Fears に接続します。この構造により、関連する恐怖を持たないレコードも含め、すべての Persons レコードが確実に含まれるようになります。
  • 代替案クエリ:

同じ結果を達成する別の方法は次のとおりです:

このクエリは 2 つの左結合を使用してテーブルを接続し、同様の結果を生成します。

以上が3 つのテーブルで MySQL LEFT JOIN を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。