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的条件的优先度问题。但是,想问一下比较专业的解释。因为自己还是有些模糊。请高手们,指点一下谢谢
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的条件的优先度问题。但是,想问一下比较专业的解释。因为自己还是有些模糊。请高手们,指点一下谢谢
根本没有这种写法
left join dbo.BPSProdInfoMaster pim on dd.BranchCode=pim.BranchCode and dd.JAN=pim.JAN)table
可以看成一个表
如是int
那pim.OrderUnit=null~改成 pim.OrderUnit is null
那即是说:where的条件是对于它之前的整体来作用的。根据上面的条件取出的数据,就没有符合where的条件的?是这个意思么?
刚才,被人叫出去谈话。