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

如何基于指定列关联拼接多个SQL查询的输出结果?

关联查询结果与转置键值表的SQL解决方案

一、基础场景:合并两个查询结果

现有以下两个查询及对应的输出,需要以id为公共列合并结果,保留所有id,缺失的列值显示NULL。

查询1及输出

Select id,first_name,middle_name
from table1
where id < 4

输出1:

idfirst_namemiddle_name
1LindaMarie
2MaryAlice
3JohnSteven

查询2及输出

Select id,last_name
from table2
where id < 4

(注:last_name为可选列,仅当有值时显示对应条目)

输出2:

idlast_name
1Jackson
3Thomson

解决方案

使用LEFT JOIN以第一个查询的id为基准关联两个结果,确保所有id都被保留:

SELECT 
    t1.id,
    t1.first_name,
    t1.middle_name,
    t2.last_name
FROM (
    Select id,first_name,middle_name
    from table1
    where id < 4
) t1
LEFT JOIN (
    Select id,last_name
    from table2
    where id < 4
) t2 ON t1.id = t2.id
ORDER BY t1.id;

期望结果

idfirst_namemiddle_namelast_name
1LindaMarieJackson
2MaryAliceNULL
3JohnStevenThomson

二、复杂场景:转置键值对表并关联

当数据源为键值对结构的表格时,需先转置为宽表再合并,以下是具体场景:

源表格数据

Table1

idEntryResult
1first_nameLinda
2first_nameMary
3first_nameJohn
1second_nameLiam
2second_nameViolet
3second_nameCharlotte

Table2

idEntryResult
1middle_nameMarie
2middle_nameAlice
3middle_nameSteven
1last_nameJackson
3last_nameThomson

解决方案

通过条件聚合将键值表转置为宽表,再用LEFT JOIN关联:

SELECT
    t1.id,
    t1.first_name,
    t2.middle_name,
    t2.last_name
FROM (
    -- 转置Table1提取first_name
    SELECT
        id,
        MAX(CASE WHEN Entry = 'first_name' THEN Result END) AS first_name
    FROM Table1
    GROUP BY id
) t1
LEFT JOIN (
    -- 转置Table2提取middle_name和last_name
    SELECT
        id,
        MAX(CASE WHEN Entry = 'middle_name' THEN Result END) AS middle_name,
        MAX(CASE WHEN Entry = 'last_name' THEN Result END) AS last_name
    FROM Table2
    GROUP BY id
) t2 ON t1.id = t2.id
ORDER BY t1.id;

期望结果

idfirst_namemiddle_namelast_name
1LindaMarieJackson
2MaryAliceNULL
3JohnStevenThomson

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:14:51