1. ホーム
  2. sql

[解決済み] 左結合を適用する前にテーブルをフィルタリングする

2023-02-24 14:21:43

質問

2つのテーブルがあり、1つのテーブルをフィルタリングしたい。 前に の前に、2つのテーブルが結合されています。

顧客テーブルです。

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

エントリーテーブルです。

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

左結合を行い、Entryテーブルに関連レコードがあるかどうかにかかわらず、Customerテーブルからすべてのレコードを取得したいと思います。しかし、私はエントリテーブルのカテゴリDでフィルタリングしたいと思います。 結合の前に .

望まれる結果

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

もし、私が以下のようなクエリを実行するとしたら。

   SELECT Customer.Customer, Customer.State, Entry.Entry
   FROM Customer
   LEFT JOIN Entry
   ON Customer.Customer=Entry.Customer
   WHERE Entry.Category='D'

これは最後のレコードをフィルタリングすることになります。

ですから、左のテーブルからすべての行を取得し、カテゴリDでフィルタリングされたエントリテーブルに結合したいと思います。

事前にどのようなヘルプに感謝します!

どのように解決するのですか?

を移動する必要があります。 WHERE フィルタを JOIN という条件を設定します。

SELECT c.Customer, c.State, e.Entry
FROM Customer c
LEFT JOIN Entry e
   ON c.Customer=e.Customer
   AND e.Category='D'

参照 SQL Fiddle with Demo