은 내가 내 데이터베이스에서 실행하고자하는 다음 쿼리는 한 :SQL Server는 다음 쿼리를 어떻게 처리합니까?
SELECT
u.UserId, u.FullName, u.Location, csr.SponsorId
FROM
[User] u
LEFT JOIN
(SELECT
csr.SponsorId
FROM
ClubSponsorRelation csr
WHERE
csr.ClubId = @clubId) AS csr ON u.UserId = csr.SponsorId
WHERE
u.UserType = 'Sponsor'
AND csr.SponsorId IS NULL
이 기본적으로 조인 제외 왼쪽을 실행하려고 아닌 ClubSponsorRelation 테이블의 모든 사용자가 반환됩니다.
제 질문은 에 관한 것입니다. Left Join 이전이나 이후에 SQL Server가이를 고려합니까?
왼쪽 결합 후 WHERE
이 적용되는 경우 어떻게 UserType 'Sponsor'를 가진 사용자에 대해서만 왼쪽 결합을 적용 할 수 있는지이 쿼리를 다시 작성할 수 있습니까? 가장 영원한 방법으로도 왼쪽보기가 있습니까? User와 ClubSponsorRelation은 시간이 지남에 따라 상당히 커질 것이고 쿼리는 자주 실행될 것입니다.
SQL을 사용할 인덱스, 통계 및하여 평가 순서를 결정하는 어떤 다른 - 지금까지 당신의 논리가 정확하고 결과는 동일합니다있다. 그러나 "exists()"조건을 사용하면 쿼리를보다 쉽게 읽을 수 있습니다. – Arvo
Luaan이 질문에 대답했지만 왼쪽 가입이 이상한 이유는 무엇입니까? LEFT JOIN ClubSponsorRelation csr on csr.ClubId = @clubId and u.UserId = csr.SponsorId. "and u.UserType = 'Sponsor'"를 추가하여 where 절에서 제거 할 수도 있습니다. –
모든 응답을 주셔서 감사합니다, 나는 그들을 통과하고 내가 허용 될 때마다 적절한 대답을 고를 것입니다. 왜 내 질문에 투표가 내려 졌는지 궁금해. 그것은 합법적 인 질문입니다, 나는 내가하고 싶은 것을 입력 해 주었고, 내가 알고 싶은 것이 분명해 보입니다. –