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

SQL查询结果行合并需求:合并指定关联行并保留其余记录

SQL行合并:保留关联主行并合并字段

针对你要合并关联行的需求,这里提供一个基于CTE的SQL解决方案,逻辑清晰且易于适配你的表结构:

实现步骤

  1. 识别所有通过parent_refill_transaction_id和parent_withdraw_transaction_id双向关联的行对(比如#4和#7),指定优先保留的主行(示例中用transaction_id更小的行作为主行,对应#4)。
  2. 对每对关联行,将主行的目标字段和关联行的目标字段合并到一条记录中。
  3. 合并处理后的关联记录与所有未关联的原始记录,得到最终结果。

示例SQL代码

WITH linked_pairs AS (
    SELECT
        a.transaction_id AS main_id,
        b.transaction_id AS linked_id,
        -- 从主行(优先保留的行)取的字段
        a.parent_refill_transaction_id,
        a.parent_withdraw_transaction_id,
        a.amount AS refill_amount,
        a.create_time AS refill_time,
        -- 从关联行取的字段
        b.amount AS withdraw_amount,
        b.create_time AS withdraw_time
    FROM transaction_table a
    JOIN transaction_table b
        -- 双向关联匹配条件:A的提现父ID是B的ID,B的充值父ID是A的ID
        ON a.parent_withdraw_transaction_id = b.transaction_id
        AND b.parent_refill_transaction_id = a.transaction_id
        -- 确保每对关联行只处理一次,避免重复
        AND a.transaction_id < b.transaction_id
),
unlinked_rows AS (
    SELECT *
    FROM transaction_table
    -- 排除所有关联对中的副行
    WHERE transaction_id NOT IN (SELECT linked_id FROM linked_pairs)
)
-- 合并处理后的关联行和未关联行
SELECT
    main_id AS transaction_id,
    parent_refill_transaction_id,
    parent_withdraw_transaction_id,
    refill_amount,
    withdraw_amount,
    refill_time,
    withdraw_time
FROM linked_pairs
UNION ALL
SELECT * FROM unlinked_rows;

关键细节说明

  • 关联规则:通过双向JOIN确保只有互相指向的行才会被判定为关联对,避免误匹配单向指向的行。
  • 主行优先级:示例中用a.transaction_id < b.transaction_id确定主行,如果你需要按其他规则(比如创建时间)选择主行,替换这个条件即可。
  • 字段自定义:在linked_pairs CTE里明确指定哪些字段取自主行、哪些取自关联行,完全可以根据你的需求调整字段列表。
  • 未关联记录保留:unlinked_rows CTE筛选出所有不属于关联副行的记录,确保这些记录完整保留在结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:50:20