0

我有两张桌子说 A 和 B 。

表一:

+------------+
| 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 |
+------------+-------------+

我尝试了不同的连接和联合,但没有得到所需的输出。提前致谢

注意:这些表是查询的结果,所以不能添加任何额外的列。

4

1 回答 1

4

这是一个非常糟糕的主意,原因很简单: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似乎确实以插入顺序返回表(假设没有中间更新或删除),尽管不能保证这样做。

于 2014-04-22T11:28:47.717 回答