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 サイトの他の関連記事を参照してください。