这样写:
select * from view_table where zd4=0 and (not (zd4 is null))
不对,既然它已经等于0,那怎么还会为null?

解决方案 »

  1.   

    多条记录,ZD4字段有NULL值,也有‘0’值
      

  2.   

    sql server先会判断,然后外联结。所以,你写的所有的条件都没有意义。
      

  3.   

    这个问题好,yangzi认真回答也好。caisongwu,你的语句有问题:“where zd4=0 and isnull(zd4,0)<>0”这个条件能为真吗?既然先判断后外联结,下面这样行不行:select * from view_table having isnull(zd4,1)=0
      

  4.   

    我试了一下,我说的语句错(因为用having)。但用下面的语句却得出需要的结果:select * from view_table where isnull(zd4,0)=0zd1  zd2  zd3  zd4  zd5  
    ---- ---- ---- ---- ----
    2    2    3    0    6
      

  5.   

    抱歉抱歉, 打错了. 应该是: select * from view_table where isnull(zd4,1)=0
      

  6.   

    nononono兄,我试了你的语句,不行。结果一样。我看了<sql server7.0技术内幕>,上面说,他们也没有成功。
      

  7.   

    看那本书的261页。
    *=这种写法是老语法。sql server可能会在下一个版本删除它。
    对应的新语法是left join。
    老语法是先执行where 子句过滤,然后再进行外联结。所以对于右表的where的子句没有意义。
    而新语法是先外联结,然后执行where 子句过滤。那个view肯定不能用了。你可以只能用下面的语句查询:
    select table1.zd1 zd1,table1.zd2 zd2,table1.zd3 zd3,table2.zd4 zd4, table2.zd5 zd5 from table1 left join table2 on table1.zd1 =table2.zd1 where table2.zd4=0
      

  8.   

    是!是!我就是用left outer join建立的视图。呵呵
      

  9.   

    我也有查资料了,由闪四清主编,康博创作室审校的《SQL SERVER 7.0》系统管理和应用开发指南一书335页中讲到:在实际使用中,应该尽量避免使用外连接创建视图,空值NULL不是数字0 
    或者空格字符,而是一个未确定的值,它可以是该空值所在的列所允许的任意值。如:某一列的取值范围是A,B,C,D和E,而某一行上对应该列有一个空值,
    那么该空值可以是A,B,C,D,E 中的任一个。
      

  10.   

    可以那么说,不过对null准确的表达应该是unknown.呵呵,还有问题吗?如果没了,把你的贴子结了吧。