VB.NET环境SQL查询结果空值被错误填充问题修正
错误原因
- 第一段SQL错误点:
- 用逗号写法隐式交叉连接
pdatatest1,生成了学生、日期、考勤的无序笛卡尔积 ptable和record1关联时仅匹配了日期字段,没有绑定学生ID关联条件,导致同日期下所有学生都匹配到了Methushal的考勤值,出现数据复用错误
- 用逗号写法隐式交叉连接
- 第二段SQL错误点:
JOIN ptable未写ON关联条件,触发语法错误- 关联考勤的子查询仅匹配了学生ID,未加日期匹配条件,会触发子查询返回多行的运行时错误,无法正常执行
修正后可直接运行的SQL
SELECT ptable.iDate AS dates12, pdatatest1.Name1, ptable.INAM, record1.INAM1 INTO project1 FROM pdatatest1 -- 先交叉连接学生表和日期表,生成所有学生对应所有考勤日期的基础数据集 CROSS JOIN ptable -- 左连接考勤表,关联条件必须同时匹配学生ID+考勤日期,避免数据错配 LEFT JOIN record1 ON pdatatest1.ID1 = record1.ID AND ptable.iDate = record1.Indate ORDER BY ptable.iDate, pdatatest1.ID1; -- 查询生成的结果表 SELECT * FROM project1;
执行效果说明
- 最终返回3名学生*6个考勤日共18条记录
- 仅Methushal(ID=1)在2022年6月1日-5日的记录能匹配到考勤表数据,显示对应的
P/A值 - 其余无匹配考勤记录的行,
INAM1字段均返回NULL,和预期结果完全一致
内容的提问来源于stack exchange,提问作者jhon mojes
相关产品推荐
相关产品推荐

