我想合并两个具有相同行的表。 Table1中的每一行与table2中的相应行。
示例:
表1:
| col1 | col2 |
----------
| a | b |
| c | d |
.
.
.
etc
和表2 :
| col3 | col4 |
----------
| 2 | 5 |
| 8 | 10 |
.
.
.
etc
结果应为:
| col1 | col2 | col3 | col4
------------------------------
| a | b | 2 | 5
| c | d | 8 | 10
我该怎么做?
答案 0 :(得分:1)
您需要一个连接键。如果您没有,可以使用变量创建一个:
select t1.col1, t1.col2, t2.col3, t2.col4
from (select t1.*, (@rn1 := @rn1 + 1) as rn
from table1 t1 cross join
(select @rn1 := 0) vars
) t1 join
(select t1.*, (@rn2 := @rn2 + 1) as rn
from table2 t2 cross join
(select @rn2 := 0) vars
) t2
on t1.rn = t2.rn;
警告:SQL不保证没有order by
子句的行的排序,因此行可以按任何顺序配对。如果您有所需的排序,请在每个子查询中使用order by
。
答案 1 :(得分:1)
今天有同样的问题。我远不是一个mySQL专业版,但它可能在未来帮助你。
您可以使用AUTO_INCREMENT语句创建新表,该语句会自动添加一个新的计数变量作为PRIMARY KEY。
所以在你的情况下......这应该有效:
CREATE TABLE new1
(
id bigint NOT NULL AUTO_INCREMENT,
col1 bigint,
col2 bigint,
PRIMARY KEY (id)
);
CREATE TABLE new2
(
id bigint NOT NULL AUTO_INCREMENT,
col3 bigint,
col4 bigint,
PRIMARY KEY (id)
);
INSERT INTO new1 (col1, col2)
SELECT * FROM t1;
INSERT INTO new2 (col3, col4)
SELECT * FROM t2;
SELECT id, col1, col2, col3, col4
FROM new1
JOIN new2 on (new1.id = new2.id);
在您的情况下,您可能必须将col1 / col2定义为VARCHAR。
肯定有任何理由不这样做,但至少它对我来说效果很好,而且很容易理解。
答案 2 :(得分:0)
没有连接键或至少是一个排序键,没有办法可靠地连接2个表。