我有两个表,分别是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/

10-12 12:51
查看更多