You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:31:41