ホームページ >データベース >mysql チュートリアル >SQL で事前にフィルターされたテーブルとの左結合を実行するにはどうすればよいですか?

SQL で事前にフィルターされたテーブルとの左結合を実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-14 13:31:46745ブラウズ

How to Perform a Left Join with a Pre-Filtered Table in SQL?

SQL 左結合とテーブル データの事前フィルタリングを効率的に実行します

複数のテーブルを操作する場合、多くの場合、テーブルを結合する前にテーブルの 1 つをフィ​​ルタリングする必要があります。この例には、Customer と Entry の 2 つのテーブルが含まれます。

目的は、これら 2 つのテーブル間で左結合を実行する前に、特定のカテゴリ「D」に基づいてエントリ テーブルをフィルタリングすることです。期待される結果は、エントリ テーブルに関連するレコードが存在するかどうかに関係なく、customer テーブル内のすべてのレコードを取得し、同時にカテゴリ条件を満たさないエントリ テーブル内のレコードを除外することです。

次の SQL クエリは、これを実現する方法を示しています。

<code class="language-sql">SELECT c.Customer, c.State, e.Entry
FROM Customer c
LEFT JOIN Entry e
   ON c.Customer=e.Customer
   AND e.Category='D'</code>

WHERE フィルター条件を JOIN 条件に移動することで、結合前にエントリー テーブルにカテゴリー フィルターを適用できます。これにより、カテゴリ基準を満たすエントリ レコードのみが結合結果に含まれるようになります。

テーブルの例

<code>客户表 (Customer):

╔══════════╦═══════╗
║ Customer ║ State ║
╠══════════╬═══════╣
║ A        ║ S     ║
║ B        ║ V     ║
║ C        ║ L     ║
╚══════════╩═══════╝

条目表 (Entry):

╔══════════╦═══════╦══════════╗
║ Customer ║ Entry ║ Category ║
╠══════════╬═══════╬══════════╣
║ A        ║  5575 ║ D        ║
║ A        ║  6532 ║ C        ║
║ A        ║  3215 ║ D        ║
║ A        ║  5645 ║ M        ║
║ B        ║  3331 ║ A        ║
║ B        ║  4445 ║ D        ║
╚══════════╩═══════╩══════════╝</code>

結果

<code>╔══════════╦═══════╦═══════╗
║ Customer ║ State ║ Entry ║
╠══════════╬═══════╬═══════╣
║ A        ║ S     ║  5575 ║
║ A        ║ S     ║  3215 ║
║ B        ║ V     ║  4445 ║
║ C        ║ L     ║  NULL ║
╚══════════╩═══════╩═══════╝</code>

要約すると、JOIN 条件で AND 句を使用すると、テーブルを結合する前にフィルタリングできるため、指定された条件に基づいてデータをより正確に取得できます。

以上がSQL で事前にフィルターされたテーブルとの左結合を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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