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

单表内SQL Join/汇总/空列填充:如何实现行合并?

多表关联JOIN实现行合并方案

多表JOIN的核心逻辑和两表一致,都是通过关联字段匹配关联行,只需依次扩展关联条件即可。下面结合常见场景给出具体实现:

1. 基础多表INNER JOIN示例

假设存在三张关联表:

  • employees:员工基础表,字段emp_id, emp_name, dept_id
  • departments:部门表,字段dept_id, dept_name
  • salaries:薪资表,字段emp_id, salary, pay_month

要合并出「员工姓名+所属部门+当月薪资」的完整行,SQL写法如下:

SELECT 
    e.emp_name,
    d.dept_name,
    s.salary,
    s.pay_month
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id
INNER JOIN salaries s ON e.emp_id = s.emp_id
WHERE s.pay_month = '2024-05';

通过dept_id关联员工与部门,再通过emp_id关联员工与薪资表,依次拼接关联条件即可完成多表关联。

2. 用LEFT JOIN保留主表全部行

如果需要保留所有员工信息(哪怕无对应部门或薪资数据),使用链式LEFT JOIN:

SELECT 
    e.emp_name,
    COALESCE(d.dept_name, '未分配部门') AS dept_name,
    COALESCE(s.salary, 0) AS salary,
    s.pay_month
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
LEFT JOIN salaries s ON e.emp_id = s.emp_id AND s.pay_month = '2024-05';

COALESCE函数用于替换NULL值,让结果格式更规整。

3. 同表内行关联(自连接)

如果关联是同表内的行对应(比如员工表中manager_id关联上级员工的emp_id),用自连接实现行合并:

SELECT 
    e.emp_name AS 员工姓名,
    m.emp_name AS 上级姓名
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;

关键注意事项

  • 多表关联时必须给表起别名(如e代表employees),避免字段名冲突
  • 关联条件要精准,防止出现笛卡尔积导致结果行数异常暴增
  • 若需将同一主体的多行数据合并为单行(比如同一员工的多条薪资记录),可结合聚合函数:
    MySQL用GROUP_CONCAT:
    SELECT 
        e.emp_name,
        d.dept_name,
        GROUP_CONCAT(s.salary ORDER BY s.pay_month SEPARATOR ', ') AS 历史薪资
    FROM employees e
    INNER JOIN departments d ON e.dept_id = d.dept_id
    INNER JOIN salaries s ON e.emp_id = s.emp_id
    GROUP BY e.emp_name, d.dept_name;
    
    PostgreSQL/SQL Server用STRING_AGG:
    SELECT 
        e.emp_name,
        d.dept_name,
        STRING_AGG(s.salary::VARCHAR, ', ' ORDER BY s.pay_month) AS 历史薪资
    FROM employees e
    INNER JOIN departments d ON e.dept_id = d.dept_id
    INNER JOIN salaries s ON e.emp_id = s.emp_id
    GROUP BY e.emp_name, d.dept_name;
    

若你的表结构或关联逻辑更特殊,可补充具体字段和目标格式,能给出更针对性的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:15:36