没有任何键加入两个表

时间:2015-01-18 16:42:44

标签: mysql sql database join merge

我想合并两个具有相同行的表。 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

我该怎么做?

3 个答案:

答案 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个表。