如果我可以包含表MasterStaging
(临时表)中的 ID,我可以优化连接:
- 在中包含 ID
EXCEPT
会扭曲结果,因为ID
fromMasterStaging
总是不同于StatusComparison
MasterStaging.ID
无关紧要,只是一个自动编号,不代表客户 ID- SQL 旨在显示丢失的客户,无论 ID 是什么。
- CustomerAccountNo 不是唯一编号
我怎样才能包括获取 ID 顶部优化JOIN
?
这就是我要的:
与下面相同的 SQL,但我JOIN
只会使用ID
) x ON e.ID = x.ID
这是我到目前为止所拥有的:
UPDATE ecl.MasterStaging
SET NewAccount = 1
FROM ecl.MasterStaging e WITH (NOLOCK)
JOIN (
SELECT
ISNULL(Usable, 0) AS Usable ,
ISNULL(TypeRC, 0) AS TypeRC ,
ISNULL(CustomerNumber, 0) AS CustomerNumber ,
ISNULL(CustomerAccountNo, 0) AS CustomerAccountNo ,
ISNULL(LoadProfileClass, 0) AS LoadProfileClass ,
ISNULL(MeterNo, 0) AS MeterNo ,
ISNULL(PrimaryPhoneNumber, 0) AS PrimaryPhoneNumber ,
ISNULL(CustomerName1, 0) AS CustomerName1 ,
ISNULL(ServiceAddress1, 0) AS ServiceAddress1 ,
ISNULL(ServiceCity, 0) AS ServiceCity ,
ISNULL(ServiceState, 0) AS ServiceState ,
ISNULL(ServiceZip, 0) AS ServiceZip ,
ISNULL(BillingAddress1, 0) AS BillingAddress1 ,
ISNULL(BillingCity, 0) AS BillingCity ,
ISNULL(BillingState, 0) AS BillingState ,
ISNULL(substring(BillingZip, 1, 5), 0) as BillingZip ,
ISNULL(substring(BillingZip4, 7, 4), 0) as BillingZip4
FROM
ecl.MasterStaging WITH (NOLOCK)
EXCEPT
SELECT Usable ,
TypeRC ,
CustomerNumber ,
CustomerAccountNo ,
LoadProfileClass ,
MeterNo ,
PrimaryPhoneNumber ,
CustomerName1 ,
ServiceAddress1 ,
ServiceCity ,
ServiceState ,
ServiceZip ,
BillingAddress1 ,
BillingCity ,
BillingState ,
BillingZip ,
BillingZip4
FROM ecl.StatusComparison WITH (NOLOCK)
WHERE [Status] <> 'D'
) x
ON
ISNULL(e.Usable,0) = x.Usable AND
ISNULL(e.TypeRC,0) = x.TypeRC AND
ISNULL(e.CustomerNumber,0) = x.CustomerNumber AND
ISNULL(e.CustomerAccountNo,0) = x.CustomerAccountNo AND
ISNULL(e.LoadProfileClass,0) = x.LoadProfileClass AND
ISNULL(e.MeterNo,0) = x.MeterNo AND
ISNULL(e.PrimaryPhoneNumber,0) = x.PrimaryPhoneNumber AND
ISNULL(e.CustomerName1,0) = x.CustomerName1 AND
ISNULL(e.ServiceAddress1,0) = x.ServiceAddress1 AND
ISNULL(e.ServiceCity,0) = x.ServiceCity AND
ISNULL(e.ServiceState,0) = x.ServiceState AND
ISNULL(e.ServiceZip,0) = x.ServiceZip AND
ISNULL(e.BillingAddress1,0) = x.BillingAddress1 AND
ISNULL(e.BillingCity,0) = x.BillingCity AND
ISNULL(e.BillingState,0) = x.BillingState AND
ISNULL(e.BillingZip,0) = x.BillingZip AND
ISNULL(e.BillingZip4,0) = x.BillingZip4