Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何组合具有不同列名的两个表_Mysql_Sql_Mysql Variables - Fatal编程技术网

Mysql 如何组合具有不同列名的两个表

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

我有两张桌子,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的第二行合并,依此类推

输出:

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


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

这是一个非常糟糕的想法,原因很简单:包括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的?