2010-08-24 3 views
1
SELECT left_tbl.* 
    FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id 
    WHERE right_tbl.id IS NULL; 

위의 코드는 하나의 오른쪽 테이블에 해당 테이블이없는 왼쪽 테이블에서 행을 검색 할 때 아름답게 작동합니다.다른 두 테이블에 해당 테이블이없는 행이 있습니까?

그러나 두 개의 오른쪽 테이블에있는 왼쪽 테이블의 행을 어떻게 찾을 수 있습니까?

답변

2

정확하게 이해하면 LEFT_TBL에있는 다른 두 테이블에 존재하지 않는 레코드를 찾고 싶습니까? 가장 읽을 수는 다음과 같습니다

SELECT a.* 
    FROM LEFT_TBL lt 
WHERE NOT EXISTS(SELECT NULL 
        FROM TABLE_A a 
        WHERE a.id = lt.id) 
    AND NOT EXISTS(SELECT NULL 
        FROM TABLE_B b 
        WHERE b.id = lt.id) 

LEFT JOIN을 사용하여이/NULL IS : 당신이 두 테이블 중 하나에 존재하지 않는 LEFT_TBL 기록을 원하는 경우에

SELECT lt.* 
    FROM LEFT_TBL lt 
LEFT JOIN TABLE_A a ON a.id = lt.id 
LEFT JOIN TABLE_B b ON b.id = lt.id 
    WHERE a.id IS NULL 
     AND b.id IS NULL 

WHERE 절에 AND 변경 ~ OR.

+0

감사합니다. 네, 제가 찾고 있었던 것이 었습니다. 둘 다 테스트하고 두 가지 모두 작동합니다. 어떤 이유로 "LEFT_TBL lt ... ltid"가 작동하지 않았지만 "LEFT_TBL ... LEFT_TBL.id"를 사용했을 때 작동했습니다. 나는 또한 "LEFT_TBL AS lt"을 시도하지 않았다. 내 코드가 구조화 된 방식 때문일 수 있습니다. – Alqin

관련 문제