需求背景
现有两张表
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_1
和tb_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 |
+----+------+-----+
欢迎大家收藏评论,如有更好的方法,还请不吝赐教。