mysql 两张表并列合并(多列数据拉链合并)

mysql 两张表并列合并

需求背景

现有两张表

SELECT * FROM `tb_1`;
+----+------+
| id | name |
+----+------+
|  1 | 小赤 |
|  2 | 小橙 |
|  3 | 小黄 |
|  4 | 小绿 |
|  5 | 小青 |
|  6 | 小蓝 |
|  7 | 小紫 |
+----+------+

SELECT * FROM `tb_2`;
+-----+
| age |
+-----+
|  14 |
|  16 |
|   8 |
|  18 |
|  13 |
|  12 |
|  17 |
+-----+

需要将两张表合并为一张,并将多列数据拉链合并。
达到以下效果

+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | 小赤 |  14 |
|  2 | 小橙 |  16 |
|  3 | 小黄 |   8 |
|  4 | 小绿 |  18 |
|  5 | 小青 |  13 |
|  6 | 小蓝 |  12 |
|  7 | 小紫 |  17 |
+----+------+-----+

处理方式

我们知道在通常情况下,想实现两表关联合并,需要满足至少有一个关联字段
但在tb_1tb_2两张表中,却没有可以关联的字段
那么我的思路是,没有可关联的字段,那就创造可关联的字段

首先,我的需求是拉链合并,需要保证顺序一致
那么,就为两张表都创建一个临时"自增id" rk
若需要排序后生成 rk,添加 ORDER BY xx 即可

SET @rownum1:=0;
SELECT 
    a.`id`, a.`name`, @rownum1:=@rownum1+1 AS rk
FROM 
    `tb_1` a
;
+----+------+----+
| id | name | rk |
+----+------+----+
|  1 | 小赤 |  1 |
|  2 | 小橙 |  2 |
|  3 | 小黄 |  3 |
|  4 | 小绿 |  4 |
|  5 | 小青 |  5 |
|  6 | 小蓝 |  6 |
|  7 | 小紫 |  7 |
+----+------+----+

SET @rownum2:=0;
SELECT
    a.`age`, @rownum2:=@rownum2+1 AS rk
FROM
    `tb_2` a
;
+-----+----+
| age | rk |
+-----+----+
|  14 |  1 |
|  16 |  2 |
|   8 |  3 |
|  18 |  4 |
|  13 |  5 |
|  12 |  6 |
|  17 |  7 |
+-----+----+

然后两表合并,以 rk 字段为关联条件,关联即可。最终SQL:

SET @rownum1:=0;
SET @rownum2:=0;
SELECT
    a.`id`, a.`name`, b.`age`
FROM
    (
        SELECT 
            a.`id`, a.`name`, @rownum1:=@rownum1+1 AS rk
        FROM 
            `tb_1` a
    ) a
    JOIN
    (
        SELECT
            a.`age`, @rownum2:=@rownum2+1 AS rk
        FROM
            `tb_2` a
    ) b
    ON a.rk = b.rk
;
+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | 小赤 |  14 |
|  2 | 小橙 |  16 |
|  3 | 小黄 |   8 |
|  4 | 小绿 |  18 |
|  5 | 小青 |  13 |
|  6 | 小蓝 |  12 |
|  7 | 小紫 |  17 |
+----+------+-----+

欢迎大家收藏评论,如有更好的方法,还请不吝赐教。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值