我有两个表,分别是A和B。
表A:
+------------+
| manager_id |
+------------+
| 100 |
| 102 |
| 103 |
| 124 |
| 149 |
| 101 |
| 201 |
| 205 |
+------------+
表格:B
+------------+
| first_name |
+------------+
| Steven |
| Lex |
| Alexander |
| Kevin |
| Eleni |
| Neena |
| Michael |
| Shelley |
+------------+
我想合并两个表。输出表应该看起来像..
表a的第一行应与表b的第一行合并。
表a的第二行应与表b的第二行合并,依此类推.....
输出:
+------------+-------------+
| manager_id | first_name |
+------------+-------------+
| 100 | steven |
| 101 | lex |
| 102 | alexander |
| 103 | kevin |
| 124 | eleni |
| 149 | neena |
| 201 | michael |
| 205 | shelley |
+------------+-------------+
我尝试了不同的联接和联合,但未获得所需的输出。
注意:这些表是查询的结果,因此无法添加任何额外的列。
最佳答案
这是一个非常糟糕的主意,原因很简单:SQL表(包括MySQL表)未排序。因此,不能保证select *
的结果将采用任何特定顺序。没有第一行,第二行,依此类推-至少没有保证。
就是说,有时候您会遇到多个表,这些表没有自动递增的ID,您可以解决它。我强烈建议您事后验证结果,因为不能保证。您需要为此使用变量:
select a.rn, a.manager_id, b.first_name
from (select @rn_a := @rn_a + 1 as rn, a.*
from a cross join
(select @rn_a := 0) const
) a join
(select @rn_b := @rn_b + 1 as rn, b.*
from b cross join
(select @rn_b := 0) const
) b
on a.rn = b.rn;
我想补充一下,这种方法在大多数支持简单选择的并行处理的数据库中将不起作用。例如,Oracle和SQL Server绝对不会按插入顺序返回大表(除非您摆弄了很多选项)。 MySQL似乎确实按插入顺序返回表(假定没有中间更新或删除),尽管不能保证这样做。
关于mysql - 如何合并具有不同列名的两个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23218037/