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

SQL查询需求:将同ID两行数据合并为单行并区分字段

解决docs表同ID多行合并为单行的问题

你的问题出在自连接的时候只匹配了id,没有限定版本号(rev)的对应关系,所以同id的所有行都进行了笛卡尔积匹配,才会得到4条冗余结果。我们需要明确指定rev=1的行作为历史版本(prior),rev=2的行作为当前版本(curr),在JOIN条件里加上这个限制就能得到预期结果。

正确的SQL查询语句

SELECT 
    A.id,
    A.content AS priorcontent,
    B.content AS currcontent,
    A.test AS priortest,
    B.test AS currtest
FROM docs A
INNER JOIN docs B 
    ON A.id = B.id 
    AND A.rev = 1  -- 指定A是rev=1的历史行
    AND B.rev = 2; -- 指定B是rev=2的当前行

结果验证

执行这条语句后,会精准返回你想要的单行结果:

id priorcontent currcontent priortest currtest
---------------------------------------------------
1 11 22 33 44

扩展通用写法(适用于多版本场景)

如果你的业务场景中,历史版本和当前版本不是固定的rev=1和rev=2(比如要合并同ID下最早和最新的版本),可以用子查询动态获取每个ID的最小/最大版本,避免硬编码版本号:

SELECT 
    A.id,
    A.content AS priorcontent,
    B.content AS currcontent,
    A.test AS priortest,
    B.test AS currtest
FROM (
    SELECT * FROM docs 
    WHERE (id, rev) IN (SELECT id, MIN(rev) FROM docs GROUP BY id)
) A
INNER JOIN (
    SELECT * FROM docs 
    WHERE (id, rev) IN (SELECT id, MAX(rev) FROM docs GROUP BY id)
) B ON A.id = B.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:09:11