左链接中“where”条件的使用问题。(求高人指点)
insert into dbo.BPSErrorLog
select
dd.BranchCode,
dd.JAN,
'订货单位为空 ',
convert(varchar,getdate(),111)
from
BPSDistributeDate dd
left join
dbo.BPSProdInfoMaster pim
on
dd.BranchCode=pim.BranchCode
and
dd.JAN=pim.JAN
where
pim.OrderUnit=null
or
pim.OrderUnit <=0
上面的一段SQL用来处理OrderUnit数据异常情况。
但是,实际运行的时候,BPSErrorLog却是空的,(已经在BPSProdInfoMaster 放置了符合where条件的数据)。
后来,改成了
insert into dbo.BPSErrorLog
select
dd.BranchCode,
dd.JAN,
case when pim.OrderUnit=null or pim.OrderUnit <=0 then '订货单位为空 ' end,
convert(varchar,getdate(),111)
from
BPSDistributeDate dd
left join
dbo.BPSProdInfoMaster pim
on
dd.BranchCode=pim.BranchCode
and
dd.JAN=pim.JAN
就可以正常实现。感觉是where的条件的优先度问题。但是,想问一下比较专业的解释。因为自己还是有些模糊。请高手们,指点一下。。。谢谢
------解决方案--------------------你 BPSProdInfoMaster 表的 OrderUnit列 是什么类型
如是int
那pim.OrderUnit=null~改成 pim.OrderUnit is null
------解决方案--------------------pim.OrderUnit is null