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

考勤系统SQL查询需求:关联TIMEIN与TIMEOUT表并补全NULL值

嘿,这个需求用**全外连接(FULL OUTER JOIN)**就能完美解决,它会保留两张表的所有记录,当某一边的索引在另一边找不到匹配时,对应字段就会自动显示NULL。下面给你具体的实现步骤:


1. 测试表结构与数据示例

先明确我们的表结构和测试数据(如果和你的实际表结构有出入,调整字段名即可):

-- 创建上班打卡表 TIMEIN
CREATE TABLE TIMEIN (
    IINDX INT PRIMARY KEY,
    EMP_NAME VARCHAR(50),
    IN_TIME DATETIME
);

-- 创建下班打卡表 TIMEOUT
CREATE TABLE TIMEOUT (
    OINDX INT PRIMARY KEY,
    EMP_NAME VARCHAR(50),
    OUT_TIME DATETIME
);

-- 插入测试数据
INSERT INTO TIMEIN VALUES 
(1, '张三', '2024-05-20 08:30:00'),
(2, '李四', '2024-05-20 08:25:00'),
(3, '王五', '2024-05-20 08:40:00');

INSERT INTO TIMEOUT VALUES 
(1, '张三', '2024-05-20 18:00:00'),
(3, '王五', '2024-05-20 18:10:00'),
(4, '赵六', '2024-05-20 18:05:00');

2. 核心查询语句

使用FULL OUTER JOIN关联两张表,关联条件为上班打卡的IINDX与下班打卡的OINDX一致:

SELECT
    t1.IINDX,
    t1.EMP_NAME AS IN_EMP_NAME,
    t1.IN_TIME,
    t2.OINDX,
    t2.EMP_NAME AS OUT_EMP_NAME,
    t2.OUT_TIME
FROM TIMEIN t1
FULL OUTER JOIN TIMEOUT t2 
    ON t1.IINDX = t2.OINDX;

3. 结果说明

  • 李四(IINDX=2)仅有上班打卡记录,无对应下班打卡(OINDX=2不存在于TIMEOUT表),因此TIMEOUT相关字段(OINDX、OUT_EMP_NAME、OUT_TIME)会显示为NULL。
  • 赵六(OINDX=4)仅有下班打卡记录,无对应上班打卡(IINDX=4不存在于TIMEIN表),因此TIMEIN相关字段(IINDX、IN_EMP_NAME、IN_TIME)会显示为NULL。
  • 张三和王五的上下打卡记录能匹配,所有字段均有正常值。

这样就完全符合你的需求啦!

内容的提问来源于stack exchange,提问作者Hussain Zagzoug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:18:20