SELECT s1.* ,
t1.SKU
FROM (
SELECT *
FROM MultiCompany.Finance.StockSnapshot sss1 WITH ( NOLOCK )
WHERE sss1.SettlementBatchNO = 201304
AND sss1.InternalCode = '16160058'
) s1
LEFT JOIN (
SELECT DISTINCT
dtdtl.FwId ,
dtdtl.SKU
FROM MultiCompany.Finance.FwDocDetails dtdtl WITH ( NOLOCK )
JOIN MultiCompany.Finance.FwDocs dtdoc WITH ( NOLOCK ) ON dtdoc.Status = 2
AND dtdtl.DocId = dtdoc.Id
AND dtdoc.WMSDateTime >= '2013-05-01'
AND dtdoc.WMSDateTime < '2013-06-01'
AND dtdtl.InternalCode = '16160058'
GROUP BY dtdtl.FwId ,
dtdtl.SKU
) t1 ON s1.SKU = t1.SKU
AND t1.FwId = s1.WarehouseId
与
SELECT s1.SettlementBatchNO,s1.InternalCode ,s1.* ,
t1.SKU
FROM MultiCompany.Finance.StockSnapshot s1 WITH ( NOLOCK )
LEFT JOIN (
SELECT DISTINCT
dtdtl.FwId ,
dtdtl.SKU
FROM MultiCompany.Finance.FwDocDetails dtdtl WITH ( NOLOCK )
JOIN MultiCompany.Finance.FwDocs dtdoc WITH ( NOLOCK ) ON dtdoc.Status = 2
AND dtdtl.DocId = dtdoc.Id
AND dtdoc.WMSDateTime >= '2013-05-01'
AND dtdoc.WMSDateTime < '2013-06-01'
AND dtdtl.InternalCode = '16160058'
GROUP BY dtdtl.FwId ,
dtdtl.SKU
) t1 ON
( s1.SettlementBatchNO = 201304
AND s1.InternalCode = '16160058')
and
s1.SKU = t1.SKU
AND s1.WarehouseId=t1.FwId
option(merge join)
不等价
经查,left join 在查询优化器中变成了right join 不等价,不知道是不是MSSQL的Bug