У меня есть запрос, подобный приведенному ниже:
Select ser.key
From dbo.Enrlmt ser
Where ser.wd >= @FromDate AND ser.wd <= @ThrouDate AND
ser.EnrlmtStatCode = '4321' AND
ser.StuExitCatgCode in ('1','2','3','4','5','6','7') AND
ser.Key not in (select Key
from Enrlmt ser2
where ser2.StartDate <= @AsOfDate
AND ser2.StartDate > ser.wd
AND ser2.EnrlmtStatCode = '4321')
Это очень медленно из-за предложения NOT IN. Я попытался переписать его, используя левое внешнее соединение, чтобы оно выглядело так:
Select ser.key
From dbo.Enrlmt ser
LEFT JOIN dbo.Enrlmt ser2 ON ser.key = ser2.key
AND ser2.StartDate <= @AsOfDate
AND ser2.StartDate > ser.wd
AND ser2.EnrlmtStatCode = '4321'
Where ser2.key is null
AND ser.wd >= @FromDate
AND ser.wd <= @ThrouDate
AND ser.EnrlmtStatCode = '4321'
AND ser.StuExitCatgCode in ('1','2','3','4','5','6','7')
Что намного быстрее, но результаты не совпадают. Я делаю что-то не так с этим переписать? Есть ли лучший способ сделать это?