在执行查询时,结果应该为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 王某 20 男
2 张某 21
3 李某 22 男
4 郑某 女
5 贾某 23 男
6 段某 女
7 赵某 19 男应该输出7条如上的记录,但由于张某的“性别”为空,郑某和段某的“年龄”为空,导致输出结果如下:序号 姓名 年龄 性别
1 王某 20 男
2 李某 22 男
3 贾某 23 男
4 赵某 19 男只输出了4条同时填有“姓名”“年龄”“性别”的记录。
改为 left join
2、where中不要加判断为空就不输出的条件
这样肯定不会出现这样的情况
2,也可以用isNULL(ColumnName,ExpectedResult)
我个人比较支持是用了inner join,改成left join
由于我刚接触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;受红色字体部分影响,导致查询结果少了很多。我不太明白应该怎么才能说的清楚,目前只是猜想这句条件判断加错位置了,但是又不知道应该加在哪里。