在执行查询时,结果应该为100行,但是由于某列的部分值为空,导致结果只输出5行。这种情况该如何处理呢?例如:序号   姓名   年龄   性别
1     王某   20    男
2     张某   21    
3     李某   22    男
4     郑某          女
5     贾某   23    男
6     段某          女
7     赵某   19    男应该输出7条如上的记录,但由于张某的“性别”为空,郑某和段某的“年龄”为空,导致输出结果如下:序号   姓名   年龄   性别
1     王某   20    男   
2     李某   22    男
3     贾某   23    男
4     赵某   19    男只输出了4条同时填有“姓名”“年龄”“性别”的记录。

解决方案 »

  1.   

    我猜是否用了 inner join
    改为 left join
      

  2.   

    1、用left join
    2、where中不要加判断为空就不输出的条件
      

  3.   

    有可能是你在查询时把为空的数据排除掉了.否则直接  select * from 表   应该是不会出现你那样的结果的.
      

  4.   

    你可以用isnull('列名','您想要的值')
      

  5.   

    和8楼意见一致,只要用SELECT * FROM____
    这样肯定不会出现这样的情况
      

  6.   

    1,where 条件是不是过滤了 某些字段 为空的纪录,
    2,也可以用isNULL(ColumnName,ExpectedResult)
      

  7.   

    楼主真是累大家啊,至少发详细点给大家啊。
    我个人比较支持是用了inner join,改成left join
      

  8.   

    真的感谢大家!
    由于我刚接触SQL,所以很多东西可能不懂得怎样描述。
    我的语句是写在Delphi里的,下面是我的语句。begin
    sqlstr:='Select T1.TDM_ID As ProID, T1.TDM_DESCRIPTION As Project,'
    +'T2.TDM_ID As ProdID, T2.TDM_DESCRIPTION As Product,'
    +'T2.CN_EQUIPMENT_LOCALNO,'
    +'T2.CN_MATERIAL,'
    //上面定义查询出的项目编号、项目名称、产品图号和产品名称;//下面定义查询出的十个时间值(不包含时间);
    +'CONVERT(varchar(10), T2.TDM_BL_START_DATE, 120) As START_DATE,'
    +'CONVERT(varchar(10), T2.TDM_BL_FINISH_DATE, 120) As FINISH_DATE,'
    +'CONVERT(varchar(10), T2.CN_CONFIRM_DATE, 120) As CONFIRM_DATE,'
    +'CONVERT(varchar(10), T2.CN_CONFIRMBACK_DATE, 120) As CONFIRMBACK_DATE,'
    +'CONVERT(varchar(10), T2.CN_CONFIRM2_DATE, 120) As CONFIRM2_DATE,'
    +'CONVERT(varchar(10), T2.CN_CONFIRM2BACK_DATE, 120) As CONFIRM2BACK_DATE,'
    +'CONVERT(varchar(10), T2.CN_DEFINISH_DATE, 120) As DEFINISH_DATE,'
    +'CONVERT(varchar(10), T2.CN_COFINISH_DATE, 120) As COFINISH_DATE,'
    +'CONVERT(varchar(10), T2.CN_EXFINISH_DATE, 120) As EXFINISH_DATE,'
    +'CONVERT(varchar(10), T2.CN_FAFINISH_DATE, 120) As FAFINISH_DATE,'+'T3.FIRST_NAME from dbo.PROJECT_TREE '
    +'INNER JOIN dbo.TN_PROJECT T1 ON T1.OBJECT_ID = dbo.PROJECT_TREE.OBJECT_ID1 And PROJECT_TREE.CLASS_ID1=''885'''
    +'INNER JOIN dbo.TN_PROJECT T2 ON T2.OBJECT_ID = dbo.PROJECT_TREE.OBJECT_ID2 ''+' And T2.TDM_BL_START_DATE Between'+''''+startdate+''''+'And'+''''+enddate+''''
    +'INNER JOIN dbo.USERS T3 ON T3.OBJECT_ID = T2.CN_DESIGNER order by Project,T2.CREATION_DATE' ;
    end;受红色字体部分影响,导致查询结果少了很多。我不太明白应该怎么才能说的清楚,目前只是猜想这句条件判断加错位置了,但是又不知道应该加在哪里。