복붙노트

[SQL] 어떻게 두 개의 테이블을 조인 할 수 있지만 일치하지 않는 행을 반환?

SQL

어떻게 두 개의 테이블을 조인 할 수 있지만 일치하지 않는 행을 반환?

I는 다음과 같이 두 개의 테이블이 있습니다

T1:  ID  |  Date  |  Hour  | Interval
T2:  ID  |  Date  |  Hour

나는 기본적으로 자신의 아이디, 날짜 및 시간과 일치 할 때이 테이블에 가입해야합니다. 그러나, 나는 단지 표 2의 결과와 일치하지 않는 표 1의 결과를 반환합니다.

나는이 간단한 것 알지만이 붙어 곳 (복수의 간격은 주어진 시간 동안가) 표 2와 일치 표 1에서 여러 행이 있다는 사실이다. 나는 그들이 표 2에 같은 시간 이내에 해당하지 않는 한 너무 오래 이러한 모든 간격을 반환해야합니다.

예 데이터 :

T1:  1  |  1/1/2011  |  1  |  1
     1  |  1/1/2011  |  1  |  2
     1  |  1/1/2011  |  2  |  1
     1  |  1/1/2011  |  2  |  2

T2:  1  |  1/1/2011  |  1

이에 대한 나의 예상 된 결과 세트는 T1에서 마지막 두 행이 될 것입니다. 바른 길에 캔 누구 포인트 나?

해결법

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

    1.

    SELECT T1.*
        FROM T1
        WHERE NOT EXISTS(SELECT NULL
                             FROM T2
                             WHERE T1.ID = T2.ID 
                                 AND T1.Date = T2.Date
                                 AND T1.Hour = T2.Hour)
    

    그것은 또한 LEFT와 함께 할 수있는 가입 :

    SELECT T1.*
        FROM T1
            LEFT JOIN T2
                ON T1.ID = T2.ID
                    AND T1.Date = T2.Date
                    AND T1.Hour = T2.Hour
        WHERE T2.ID IS NULL
    
  2. ==============================

    2.왼쪽이 조인을 사용하고 NULL이 아닌 T2의 열이 행을 필터링 :

    왼쪽이 조인을 사용하고 NULL이 아닌 T2의 열이 행을 필터링 :

    SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID
        AND T1.Date = T2.Date AND T1.Hour = T2.Hour
        WHERE T2.ID IS NULL
    
  3. from https://stackoverflow.com/questions/6613708/how-can-i-join-two-tables-but-only-return-rows-that-dont-match by cc-by-sa and MIT license