두 테이블이 있습니다 :SQL 문의 하위 쿼리 사용에 대한 대안?
TableA: (a temporary table)
ItemId (int)
TableB:
ItemId (int), ParentID (int)
표 A의 항목 중 ParentID가 ItemID로 존재하지 않는 표 A의 모든 항목을 검색하려고합니다. (즉, TableA 항목의 루트를 가져오고 싶습니다.)
이 쿼리는 내가 원하는 것을 수행합니다.
SELECT a.ItemID
FROM TableA a
INNER JOIN TableB b ON a.ItemId = b.ItemID
WHERE b.ParentID NOT IN (SELECT * from TableA)
다음과 같이하십시오.
SELECT b.ItemID
FROM TableB b
WHERE b.ItemID IN (SELECT * FROM TableA)
AND b.ParentID NOT IN (SELECT * FROM TableA)
특히 NOT IN/IN을 사용하기 때문에 쿼리의 그들없이 할 수있는 방법이 있습니까? 아마도 서브 쿼리를 필요로하지 않는 더 깨끗한 방법일까요?
샘플 데이터 :
Table A
-------
2
3
5
6
Table B
--------
1 | NULL
2 | 1
3 | 1
4 | 3
5 | 3
6 | 3
원하는 결과 :
2
3
감사
이 하위 쿼리에 위배되는 이유가 있습니까? 이 경우에는 'LEFT JOIN'보다 빨리 실행해야합니다. – JNK
음, 분명히 하위 쿼리를 반복하지 않아도되는 것을 좋아합니다 ... 그렇게하는 것이 이상하게 보입니다. 그런 말을하면서, 나는 단지 그들이 나쁘다고 생각했는데 ... 그게 ... 나는 ... 모든 곳에서 읽었다. – Swati
아마이 인스턴스에서 더 빨리 진행될 수있는 이유를 설명 할 수 있습니까? – Swati