害人的null值,在SQL server 中。

    我们知道在sql server 中,有一个 NULL表示为空,这个null要是处理不好,可是要害死人的 :)                      

    因为在sql servel 中 如果你拿一个值去和null值, 不管是用等于,还是不等于,它均返回false

    举例来说就是:
             select 'aa' where 'aa' <> null
             select 'aa' where 'aa' = null

   运行以上两句SQL结果查询出来的数据都是空,第一句SQL并没有按预期的显示字符串aa,而要显示出来只有有下面的SQL语句

              select 'aa' where 'aa' is not null

   还有就是在not in 中如下
          select 'aa' where 'aa' not in ( null, 'bb')

  按理,应能显示出字符串'aa',结果却没有显示。因为 'aa'与null的关系既不是相等,也不是不相等。

  今天在做查询时就遇到一个相同的问题,如下的查询语句怎么也查不出数据。但一分析数据,又的确能查出

SELECT     
                   *
    FROM  dbo.CheckVoidSo
WHERE  SoNumber NOT IN ( 
                                                         SELECT DISTINCT SoNumber  
                                                             FROM imk.dbo.DayliProcessCreditForVoidSO

                                                     )

  最后终于找到原因就是因为子查询是有空值,就是那个空值惹的祸。一排除空值,一切正常。

SELECT                         *
    FROM  dbo.CheckVoidSo
WHERE  SoNumber NOT IN ( 
                                                         SELECT DISTINCT SoNumber  
                                                             FROM imk.dbo.DayliProcessCreditForVoidSO
                                                          WHERE NOT sonumber IS NULL  
                                                     )

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值