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的条件的优先度问题。但是,想问一下比较专业的解释。因为自己还是有些模糊。请高手们,指点一下谢谢

解决方案 »

  1.   

    pim.OrderUnit=null
    根本没有这种写法
      

  2.   

    where 是在你join以后的~~~~也就是说在你(on)左链接后的一些条件!!!from(BPSDistributeDate dd
    left join dbo.BPSProdInfoMaster pim on dd.BranchCode=pim.BranchCode and dd.JAN=pim.JAN)table
    可以看成一个表
      

  3.   

    你 BPSProdInfoMaster 表的 OrderUnit列 是什么类型
    如是int 
    那pim.OrderUnit=null~改成 pim.OrderUnit is null
      

  4.   

    是int型的。偶也发现了,确实看着就不顺。
    那即是说:where的条件是对于它之前的整体来作用的。根据上面的条件取出的数据,就没有符合where的条件的?是这个意思么?
    刚才,被人叫出去谈话。
      

  5.   

    where ~~~是之后的~~~不是之前的~~