두 개의 테이블이 있는데 하나에는 기본 키가 있고 다른 하나는 외래 키로 있습니다.
보조 테이블에 키가 포함 된 항목 이없는 경우에만 기본 테이블에서 데이터를 가져오고 싶습니다 . 해당 키로 결합하는 행만 반환하는 단순한 내부 결합의 반대입니다.
답변:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
조인의 전체 이미지
aticle에서 : http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
B.Key IS NULL
그러나 우리는 여전히 비교 가능 A.Key = B.Key
합니까?
SELECT
*
FROM
primarytable P
WHERE
NOT EXISTS (SELECT * FROM secondarytable S
WHERE
P.PKCol = S.FKCol)
일반적으로 , (NOT) EXISTS
있는 더 나은 선택 후 (NOT) IN
또는(LEFT) JOIN
LEFT JOIN
성능을 능가합니다NOT EXIST
이는 Cognos에서 SQL "Not in"문을 만들 수 있었지만 실행하는 데 너무 오래 걸렸기 때문에 COGNOS에서 사용하는 데 유용했습니다. Cognos의 테이블 B에 조인하기 위해 테이블 A를 A.key "not in"B.key로 수동으로 코딩했지만 쿼리가 너무 오래 걸리거나 5 분 후에 결과를 반환하지 않았습니다.
Cognos에서 "NOT IN"솔루션을 찾고있는 다른 사람을 위해 제가 한 일은 다음과 같습니다. 연결 유형을 선택하여 Cognos에서 LEFT JOIN을 사용하여 테이블 A와 B를 조인하는 쿼리를 만듭니다. 테이블 A.Key에는 테이블 B에 "0에서 N"값이 있습니다. 그런 다음 테이블 B에 대한 필터 (Where 절에 해당)를 추가합니다. .Key가 NULL입니다.
빠르게 달렸고 매력처럼.