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

如何横向拼接两个行数相同但无关联的MySQL查询结果?

解决方案

由于两个查询没有共同关联字段,但行数一致且需要按各自排序结果一一对应合并,可以通过给两个查询分别添加行号,再通过行号关联来实现需求:

完整SQL语句

SELECT 
    q1.id,
    q1.name_id,
    q1.content,
    q1.create_time,
    q2.validity,
    q2.code,
    q2.image
FROM (
    SELECT 
        `namelist`.`id`,
        `name`.`id` AS `name_id`, 
        `name_item`.`content`,
        `order`.`create_time`,
        ROW_NUMBER() OVER (ORDER BY `name`.`id`) AS rn
    FROM
        `namelist`
        LEFT JOIN `name` ON `name`.`namelist_id` = `namelist`.`id`
        LEFT JOIN `name_item` ON `name_item`.`name_id` = `name`.`id`
        LEFT JOIN `order` ON `namelist`.`order_id` = `order`.`id`
        LEFT JOIN `items` ON `items`.`id` = `name_item`.`items_id`
    WHERE
        `namelist`.`order_id`=1380 AND `items`.`key`='Name'
    GROUP BY `name_item`.`content`
    ORDER BY `name`.`id`
) q1
JOIN (
    SELECT 
        `validity`, 
        `code`, 
        `image`,
        ROW_NUMBER() OVER (ORDER BY `id`) AS rn
    FROM `code` 
    WHERE `code`.`order_id` = 1380 
    ORDER BY `id`
) q2 ON q1.rn = q2.rn;

原理说明

  1. 添加行号:用ROW_NUMBER()窗口函数分别为两个查询的结果按各自的排序规则生成唯一行号rn,以此作为临时关联键。
  2. 按行号关联:通过JOIN ... ON q1.rn = q2.rn将两个查询的结果按行号一一对应合并,既避免了CROSS JOIN产生的笛卡尔积重复,也不会像UNION那样将结果追加成多行。

注意:需确保两个子查询的行数完全一致,否则会出现部分数据匹配不到的情况(若要保留所有行可改用LEFT JOIN)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:01:17