Mysql 如何组合具有不同列名的两个表
我有两张桌子,A和B 表A:Mysql 如何组合具有不同列名的两个表,mysql,sql,mysql-variables,Mysql,Sql,Mysql Variables,我有两张桌子,A和B 表A: +------------+ | manager_id | +------------+ | 100 | | 102 | | 103 | | 124 | | 149 | | 101 | | 201 | | 205 | +------------+ 表:B +------------+ | first_name | +------------+ | Ste
+------------+
| 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的第二行合并,依此类推
输出:
我尝试了不同的联接和联合,但没有得到所需的输出。提前谢谢
注意:这些表是查询的结果,因此不能添加任何额外的列。这是一个非常糟糕的想法,原因很简单:包括MySQL表在内的SQL表没有排序。因此,无法保证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表在内的SQL表没有顺序。因此,无法保证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在没有中间更新或删除的情况下,似乎会以插入顺序返回表,但不能保证这样做。这两个表之间有关系吗?@RagingBull没有。我只想连接两个表。您需要添加一个关系,即,表B中的ID与表a中的管理员ID相对应。这些表是查询的结果,因此,无法添加任何额外的列。@Matt但存在未记录的关系,例如manager_id“100”是给steven的?这两个表之间有关系吗?@RagingBull没有。我只想连接两个表。您需要添加一个关系,例如,表B中的ID与表a中的经理ID相对应。这些表是查询的结果,因此不能添加任何额外的列。@Matt但存在未记录的关系,例如经理ID“100”是steven的?