我有两张桌子说A和B.
表A:
+------------+
| manager_id |
+------------+
| 100 |
| 102 |
| 103 |
| 124 |
| 149 |
| 101 |
| 201 |
| 205 |
+------------+
表:乙
+------------+
| first_name |
+------------+
| Steven |
| Lex |
| Alexander |
| Kevin |
| Eleni |
| Neena |
| Michael |
| Shelley |
+------------+
我希望将两个表结合起来。输出表应该看起来像..
表a的第1行应与表b的第1行组合。 表a的第2行应该与表b的第2行结合,依此类推......
输出:
+------------+-------------+
| manager_id | first_name |
+------------+-------------+
| 100 | steven |
| 101 | lex |
| 102 | alexander |
| 103 | kevin |
| 124 | eleni |
| 149 | neena |
| 201 | michael |
| 205 | shelley |
+------------+-------------+
我尝试了不同的连接和联合但没有得到所需的输出。提前谢谢
注意:这些表是查询的结果,因此无法添加任何额外的列。
答案 0 :(得分: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 似乎以插入顺序返回表(假设没有中间更新或删除),尽管不能保证这样做。