日期:2014-05-18  浏览次数:20544 次

左链接中“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