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

MySQL中如何不使用UNION合并两个SELECT查询(横向追加列)

实现横向合并查询结果的方法

当然可以实现这种横向追加列的合并效果,不需要用UNION/UNION ALL,你可以通过**JOIN(连接)**操作来实现,具体分两种情况处理:

方法1:基于共同字段关联

如果两个查询结果存在可以关联的共同字段(比如示例里的Ano),可以直接通过该字段进行连接:

SELECT 
    q1.N_utente AS N_utente,
    q1.Ano,
    q1.Mes AS Mes8,
    q1.Farmacia AS Farmacia8,
    q2.Mes AS Mes9,
    q2.Cabeleireiro AS Cabeleireiro9
FROM (
    -- 第一个查询,起别名q1
    SELECT N_utente, Ano, Mes, Farmacia
    FROM raddb.Areceber
    WHERE N_utente <> '0' AND Farmacia <> '0.00' AND Mes = '1'
) q1
JOIN (
    -- 第二个查询,起别名q2
    SELECT N_utente, Ano, Mes, Cabeleireiro
    FROM raddb.Areceber
    WHERE N_utente <> '0' AND Cabeleireiro <> '0.00' AND Mes = '1'
) q2 ON q1.Ano = q2.Ano; -- 可根据实际业务调整关联字段

方法2:基于行号关联(无共同关联字段时)

如果两个查询结果没有合适的共同关联字段,只是需要按结果行的顺序横向拼接,可以给每个查询添加行号,再通过行号连接:

SELECT 
    q1.N_utente,
    q1.Ano,
    q1.Mes AS Mes8,
    q1.Farmacia AS Farmacia8,
    q2.Mes AS Mes9,
    q2.Cabeleireiro AS Cabeleireiro9
FROM (
    SELECT 
        N_utente, Ano, Mes, Farmacia,
        ROW_NUMBER() OVER (ORDER BY N_utente) AS row_num -- 添加行号
    FROM raddb.Areceber
    WHERE N_utente <> '0' AND Farmacia <> '0.00' AND Mes = '1'
) q1
JOIN (
    SELECT 
        N_utente, Ano, Mes, Cabeleireiro,
        ROW_NUMBER() OVER (ORDER BY N_utente) AS row_num -- 添加行号
    FROM raddb.Areceber
    WHERE N_utente <> '0' AND Cabeleireiro <> '0.00' AND Mes = '1'
) q2 ON q1.row_num = q2.row_num;

注意事项

  • 如果两个查询结果行数不一致,INNER JOIN只会保留两边都有匹配的行;若要保留所有行,可使用FULL OUTER JOIN(部分数据库支持,MySQL需通过UNION+LEFT JOIN+RIGHT JOIN模拟)。
  • 你需要的自定义列名(如Mes8)可通过AS关键字指定,与目标结果对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:05:17