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

如何从无关联多表提取同名列并合并为结果集的不同列

无关联表提取同名列并合并为不同列的解决方案

核心思路

由于两张表没有业务关联关系,我们需要基于行的物理顺序生成序号,通过序号将两个表的行对齐,再用全连接(FULL JOIN)保留两边所有行,缺失的位置自动填充NULL。

示例数据

Customer表

customeridcustomerName
1客户A
2客户B

Order表

customeridorderName
1订单1
4订单2
5订单3

适用于支持窗口函数的数据库(MySQL 8+/SQL Server/PostgreSQL等)

使用ROW_NUMBER()窗口函数为每行生成唯一序号,再通过序号关联两个表:

SELECT 
    c.customerid AS customer_cid,
    o.customerid AS order_cid
FROM
    (SELECT customerid, ROW_NUMBER() OVER () AS rn FROM Customer) c
FULL JOIN
    (SELECT customerid, ROW_NUMBER() OVER () AS rn FROM "Order") o
ON c.rn = o.rn;

注意:Order是数据库关键字,不同数据库转义方式不同:SQL Server/PostgreSQL用双引号,MySQL用反引号。

查询结果

customer_cidorder_cid
11
24
NULL5

兼容MySQL 5.x的方案(无窗口函数支持)

用用户变量生成行号,同时通过LEFT JOIN + UNION RIGHT JOIN模拟全连接(MySQL 5.x不支持原生FULL JOIN):

SELECT 
    c.customerid AS customer_cid,
    o.customerid AS order_cid
FROM
    (SELECT customerid, @row1 := @row1 + 1 AS rn FROM Customer, (SELECT @row1 := 0) r) c
LEFT JOIN
    (SELECT customerid, @row2 := @row2 + 1 AS rn FROM `Order`, (SELECT @row2 := 0) r) o
ON c.rn = o.rn
UNION
SELECT 
    c.customerid AS customer_cid,
    o.customerid AS order_cid
FROM
    (SELECT customerid, @row1 := @row1 + 1 AS rn FROM Customer, (SELECT @row1 := 0) r) c
RIGHT JOIN
    (SELECT customerid, @row2 := @row2 + 1 AS rn FROM `Order`, (SELECT @row2 := 0) r) o
ON c.rn = o.rn;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:01:24