복붙노트

[SQL] 필터 테이블 왼쪽 가입 적용하기 전에

SQL

필터 테이블 왼쪽 가입 적용하기 전에

나는이 두 테이블이 함께 결합되기 전에 한 테이블을 필터링하려면,이 개 테이블을 가지고있다.

고객 테이블 :

   ╔══════════╦═══════╗
   ║ 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        ║
   ╚══════════╩═══════╩══════════╝

나는 관계없이 항목 테이블에 관련 기록이 있는지의 고객 테이블에서 모든 레코드를 얻을 수 있도록 왼쪽에 참여하기에 나는 원한다. 그러나 나는 가입하기 전에 항목을 테이블에 카테고리 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.에 필터링 된 항목 테이블에 조인 그래서

사전에 어떤 도움에 감사합니다!

해결법

  1. ==============================

    1.당신은이 조건을 가입하는 WHERE 필터를 이동해야합니다 :

    당신은이 조건을 가입하는 WHERE 필터를 이동해야합니다 :

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

    데모와 SQL 바이올린을 참조하십시오

  2. ==============================

    2.당신은 또한 할 수있다 :

    당신은 또한 할 수있다 :

    SELECT c.Customer, c.State, e.Entry
    FROM Customer AS c
    LEFT JOIN (SELECT * FROM Entry WHERE Category='D') AS e
    ON c.Customer=e.Customer
    

    SQL 바이올린 여기

  3. ==============================

    3.또는...

    또는...

    SELECT c.Customer, c.State, e.Entry
    FROM Customer c
    LEFT JOIN Entry e
       ON c.Customer=e.Customer
    WHERE e.Category IS NULL or e.Category='D'
    
  4. from https://stackoverflow.com/questions/15077053/filter-table-before-applying-left-join by cc-by-sa and MIT license