下面是我的一个SQL语句:
select slb.zbh as ZBH, slb.x as X,slb.m as M,
 slb.xzz as XZZ,slb.lxdh as LXDH,xbb.mc as XB,
hkszddmb.printmc AS PRINTMC, TO_CHAR(slb.csny,'YYYY-MM-DD') as CSNY,
hyzkb.mc as HYZK,mzb.mc as MZ,sqlbb.mc as SQLB,whcdb.mc as WHCD,
zzmmb.mc as ZZMM
 from slb,hkszddmb,xbb,hyzkb,mzb,sqlbb,whcdb,zzmmb
 where slb.HKSZD=hkszddmb.dm and slb.xb=xbb.dm and 
slb.hyzk= hyzkb.dm and slb.mzdm=mzb.dm and 
slb.sqlb=sqlbb.dm and slb.whcd=whcdb.dm 
and slb.zzmm=zzmmb.dm and slb.shbzh='132045670831211'比如:slb.mzdm=mzb.dm  
如果slb.mzdm本身没有数值的话,整个SQL语句就查不到,我想的是没有数值的话就显示空
字段都有数值的记录就可以查到,但不全的话就查不到。如何解决?

解决方案 »

  1.   

    好象有个函数叫nvl的,它的功能是转换空数据的
      

  2.   

    如果是oracle数据库,提供了nvl()nvl(slb.mzdm,0)=mzb.dm意思是当slb.mzdm的值为空(null)时,将其值变为0(或你自定义的其他值)如果是其它数据库,应该有相应的函数,查一下对应数据库的手册。
      

  3.   

    用IS NULL 也行
    select ... from ...
    where field is null
      

  4.   

    to oracle_lover(数据库情人)
    你的意思我明白,但转化成0的话,必须是要在mzb代码表中再加一条记录。
    比如
    DM  MC
    0   未指明
    是必须这样吗?
    如果不想加这样一条记录,怎么解决? 谢谢了to feels30000(船长)
    LEFTJOIN怎么用?能否具体说明? 谢谢了
      

  5.   

    如果是sql的话leftjoin 只需要写成a*=b
    或者用标准的join语法。
    在Oracle中:
    SELECT S.SSN AS SSN,
    FNAME, LNAME
    FROM STUDENT_ADMIN.STUDENT S,
    DEPT_ADMIN.CLASS C,
    STUDENT_ADMIN.GRADE G
    WHERE S.SSN = G.SSN(+)
    AND G.CCODE = C.CCODE(+)在sql server中:
     SELECT S.SSN AS SSN,
    FNAME, LNAME
    FROM STUDENT_ADMIN.GRADE G
    RIGHT OUTER JOIN
    STUDENT_ADMIN.STUDENT S
    ON G.SSN = S.SSN
    LEFT OUTER JOIN
    DEPT_ADMIN.CLASS C
    ON G.CCODE = C.CCODE
      

  6.   

    不好意思,写的是right join不过语法和left join 差不多。
      

  7.   

    slb.mzdm(+)=mzb.dm 
    这里(+)的意思是如果slb.mzdm有,但mzb.dm没有相应的值也取该记录,当然mzb表的要列的相应
    字段就都为空;oracle是支持这种方式的,不过你的我就不知道了