SQL双表查询需求:分配表有数据时无论休假详情表状态均返回数据
解决你的SQL查询需求
嘿,你这是搞反了关联的主表顺序啦,这就是为啥只有两表都有数据时才返回结果的原因!咱们来调整一下:
问题根源
你当前用的是LV_ADJ_DETAILS左连TBL_LV_ALLOTMENT,这意味着只有当休假详情表有数据时,才会尝试关联分配表的数据。但你的需求是优先展示分配表的数据——不管详情表有没有对应记录,分配表的内容都要显示出来。
修改后的查询语句
SELECT K.EMPNO, K.LV_NAME, K.ALLOTMENT, K.REMAIN, M.LV_FROM, M.LV_TO FROM TBL_LV_ALLOTMENT k LEFT JOIN LV_ADJ_DETAILS m ON M.EMPNO = K.EMPNO WHERE K.EMPNO = 'EMP00...'
关键调整点
- 把
TBL_LV_ALLOTMENT作为主表(放在FROM后面),左连接LV_ADJ_DETAILS:这样分配表中所有匹配WHERE条件的记录都会被返回,即使详情表没有对应的数据(此时M.LV_FROM和M.LV_TO会显示为NULL) - 原来的
WHERE K.EMPNO = 'EMP00...'放在主表过滤上,不会过滤掉详情表无数据的情况——如果是原来的关联顺序,这个条件会自动把详情表无数据的记录过滤掉(因为此时K.EMPNO为NULL,不满足等于条件)
可选优化:给空值设置默认显示
如果你想让详情表无数据时,日期字段显示更友好的内容(比如“无休假记录”),可以用COALESCE函数处理:
SELECT K.EMPNO, K.LV_NAME, K.ALLOTMENT, K.REMAIN, COALESCE(M.LV_FROM, '无休假记录') AS LV_FROM, COALESCE(M.LV_TO, '无休假记录') AS LV_TO FROM TBL_LV_ALLOTMENT k LEFT JOIN LV_ADJ_DETAILS m ON M.EMPNO = K.EMPNO WHERE K.EMPNO = 'EMP00...'
内容的提问来源于stack exchange,提问作者user8512043
相关产品推荐
相关产品推荐

