Program Club

다른 테이블과 조인하지 않는 행을 제외하는 방법은 무엇입니까?

proclub 2020. 11. 2. 20:07
반응형

다른 테이블과 조인하지 않는 행을 제외하는 방법은 무엇입니까?


두 개의 테이블이 있는데 하나에는 기본 키가 있고 다른 하나는 외래 키로 있습니다.

보조 테이블에 키가 포함 된 항목 이없는 경우에만 기본 테이블에서 데이터를 가져오고 싶습니다 . 해당 키로 결합하는 행만 반환하는 단순한 내부 결합의 반대입니다.


대체 텍스트

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


SELECT
   *
FROM
   primarytable P
WHERE
   NOT EXISTS (SELECT * FROM secondarytable S
     WHERE
         P.PKCol = S.FKCol)

일반적으로 , (NOT) EXISTS있는 더 나은 선택 후 (NOT) IN또는(LEFT) JOIN


"존재하지 않음"왼쪽 조인 사용 :

SELECT p.*
FROM primary_table p LEFT JOIN second s ON p.ID = s.ID
WHERE s.ID IS NULL

SELECT P.*
FROM primary_table P
LEFT JOIN secondary_table S on P.id = S.p_id
WHERE S.p_id IS NULL

두 번째 테이블에도있는 첫 번째 테이블에서 열을 선택하려면이 경우에도 사용할 수 있습니다 EXCEPT.이 경우 열 이름도 다를 수 있지만 데이터 유형은 동일해야합니다.

Example:

select ID, FName
from FirstTable
EXCEPT
select ID, SName
from SecondTable

Another solution is:

SELECT * FROM TABLE1 WHERE id NOT IN (SELECT id FROM TABLE2)

This was helpful to use in COGNOS because creating a SQL "Not in" statement in Cognos was allowed, but it took too long to run. I had manually coded table A to join to table B in in Cognos as A.key "not in" B.key, but the query was taking too long/not returning results after 5 minutes.

For anyone else that is looking for a "NOT IN" solution in Cognos, here is what I did. Create a Query that joins table A and B with a LEFT JOIN in Cognos by selecting link type: table A.Key has "0 to N" values in table B, then added a Filter (these correspond to Where Clauses) for: table B.Key is NULL.

Ran fast and like a charm.

참고URL : https://stackoverflow.com/questions/4560471/how-to-exclude-rows-that-dont-join-with-another-table

반응형