Предложение ON
содержит условие, к которому Provider
строк присоединяется к Authorization
строкам.В вашем случае это условие IN
.Пункты IN
обычно не коррелированы, но ваш, что не так, но тогда было бы более типично использовать EXISTS
.Более того, Provider
в подзапросе является излишним, что делает предложение еще менее читабельным.
Что пытается сделать запрос:
LEFT JOIN dbo.provider pr ON (pr.providerid, auth.sponsorid) IN
(
SELECT providerid, sponsorid
FROM dbo.providersponsor
WHERE issponsor = 'true'
)
, но SQL Server не позволяеткортежи в предложении IN
, как это делают другие СУБД.В сокращенном предложении вы видите, что мы присоединяемся ко всем провайдерам со своими спонсорами.
Если в ProviderSponsor
нет повторяющихся кортежей провайдеров / спонсоров, вы также можете присоединиться к столу.(Предложение IN
или EXISTS
имеет смысл только во избежание дублирования.)
SELECT *
FROM placementdetail_temp pdt
LEFT JOIN dbo.authorization auth ON auth.placementdetailid = pdt.placementdetailid
AND auth.payorid = @payorid
LEFT JOIN dbo.providersponsor ps ON ps.sponsorid = auth.sponsorid AND ps.issponsor = 'True'
LEFT JOIN dbo.provider pr ON pr.ProviderID = ps.ProviderID;
(Из вашего запроса неясно, находится ли IsSponsor
в ProviderSponsor
или Provider
. В моих запросах я предполагаю, что он находится в ProviderSponsor
. Если вместо этого он находится в Provider
, переместите условие в соответствующее место.)