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

如何编写SQL实现两张结构相同的表按行交替输出所有记录

交替拼接两张同结构表数据的SQL实现方案

实现逻辑

  • 为两张表的每行记录生成独立的自增行号,保证两张表同位置的记录行号一致
  • 合并两张表的所有数据,新增表来源标记,Table1的优先级高于Table2
  • 最终按行号升序、来源标记升序排序,相同行号下Table1的记录始终排在Table2前面,即可实现交替输出

通用标准SQL实现(支持MySQL8+、PostgreSQL、SQL Server、Oracle等所有支持窗口函数的数据库)

SELECT ABC, DEF
FROM (
    -- 生成Table1的行号与来源标记
    SELECT 
        ABC,
        DEF,
        ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_num,
        1 AS source_flag
    FROM Table1
    UNION ALL
    -- 生成Table2的行号与来源标记
    SELECT 
        ABC,
        DEF,
        ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_num,
        2 AS source_flag
    FROM Table2
) AS combined_data
ORDER BY row_num, source_flag;

MySQL 5.x 兼容实现(不支持窗口函数场景)

SELECT ABC, DEF
FROM (
    SELECT ABC, DEF, @row1 := @row1 + 1 AS row_num, 1 AS source_flag
    FROM Table1, (SELECT @row1 := 0) AS init_param
    UNION ALL
    SELECT ABC, DEF, @row2 := @row2 + 1 AS row_num, 2 AS source_flag
    FROM Table2, (SELECT @row2 := 0) AS init_param
) AS combined_data
ORDER BY row_num, source_flag;

输出结果验证

执行上述语句后将得到符合要求的输出:

ABCDEF
GSPM
YZTT
BSPK
UGKK

注:如果需要固定Table1/Table2内部的行顺序,可以将ROW_NUMBER()的排序规则替换为实际业务排序字段,比如ORDER BY ABC,避免不同执行环境下内部行顺序不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:45:03