ホームページ >データベース >mysql チュートリアル >LEFT JOIN と RIGHT JOIN を使用して MySQL で FULL JOIN をエミュレートするにはどうすればよいですか?

LEFT JOIN と RIGHT JOIN を使用して MySQL で FULL JOIN をエミュレートするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-16 08:38:02315ブラウズ

How Can I Emulate a FULL JOIN in MySQL Using LEFT and RIGHT JOINs?

LEFT JOINS と RIGHT JOINS を使用した MySQL FULL JOIN のエミュレーション

MySQL は、FULL JOIN 操作をネイティブにサポートしません。ただし、LEFT JOIN と RIGHT JOIN を組み合わせて使用​​しても、同様の結果を得ることができます。

問題を理解する

目標は、以下を含む結果セットを返すことです。一致するフィールド (P_Id) がいずれかのテーブルで null であっても、両方のテーブル (Persons と Orders) のすべてのレコードtable.

解決策

FULL JOIN をシミュレートするには、次のクエリを使用します。

SELECT  p.LastName, p.FirstName, o.OrderNo
FROM    Persons p
LEFT JOIN
        Orders o
ON      p.P_Id = o.P_Id
UNION ALL
SELECT  p.LastName, p.FirstName, o.OrderNo
FROM    Persons p
RIGHT JOIN
        Orders o
ON      p.P_Id = o.P_Id
WHERE   p.P_Id IS NULL
ORDER BY
        p.LastName;

説明

  • LEFT JOIN は、個人からのすべての行を返します。
  • UNION ALL 操作は、LEFT JOIN の結果と RIGHT JOIN の結果を結合し、Orders テーブルのすべての行を返します。これには、Persons テーブル内の P_Id 値が一致する行と一致しない行が含まれます。
  • WHERE 句は、Persons テーブルから行をフィルターで除外します。 NULL の P_Id を持つクエリで、LEFT JOIN からのすべての行が確実に含まれるようにします。
  • ORDER BY 句は、LastName 列によって結果を並べ替えます。

このクエリは結果セットを生成します。問題文で説明されているものと同じです:

LastName FirstName OrderNo
Hansen Ola 22456
Hansen Ola 24562
Pettersen Kari 77895
Pettersen Kari 44678
Svendsen Tove 34764

以上がLEFT JOIN と RIGHT JOIN を使用して MySQL で FULL JOIN をエミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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