如何使用来自2个不同来源的不相关数据填充2列表?

时间:2010-07-18 23:09:40

标签: sql

我有2个表,每个表都有一个标识列。我想要做的是填充一个带有这些身份的新的2列表,以便它导致身份的配对。

现在,我完全可以使用其中一个表中的标识填充新表的一列,但无法将另一个表中的标识放入我的新表中。如果这不是最好的第一步,请告诉我。

谢谢

3 个答案:

答案 0 :(得分:2)

您可能想尝试以下内容:

INSERT INTO t3 (id, value_1, value_2)
SELECT t1.id, t1.value, t2.value 
FROM   t1 
JOIN   t2 ON (t2.id = t1.id);

测试用例(MySQL):

CREATE TABLE t1 (id int, value int);
CREATE TABLE t2 (id int, value int);
CREATE TABLE t3 (id int, value_1 int, value_2 int);

INSERT INTO t1 VALUES (1, 100);
INSERT INTO t1 VALUES (2, 200);
INSERT INTO t1 VALUES (3, 300);

INSERT INTO t2 VALUES (1, 10);
INSERT INTO t2 VALUES (2, 20);
INSERT INTO t2 VALUES (3, 30);

结果:

SELECT * FROM t3;
+------+---------+---------+
| id   | value_1 | value_2 |
+------+---------+---------+
|    1 |     100 |      10 |
|    2 |     200 |      20 |
|    3 |     300 |      30 |
+------+---------+---------+
3 rows in set (0.00 sec)

答案 1 :(得分:1)

您可以使用INSERT...SELECT语法填充表格,SELECT可以是两个(或更多)表格之间的联接结果。

INSERT INTO NewTable (col1, col2)
  SELECT a.col1, b.col2
  FROM a JOIN b ON ...conditions...;

因此,如果您可以将配对表达为SELECT,则可以将其插入表格中。

如果两个表无关并且无法表达配对,那么您就会问如何创建非关系数据存储,并且没有关系规则。< / p>

答案 2 :(得分:0)

一个选项是为每个作为唯一标识符的列创建一个计数器,然后加入计数器。

对于SQL Server,这将起作用:

SELECT one.column1, two.column2
FROM (SELECT RANK() OVER (ORDER BY column1) AS id, 
             column1 
      FROM table1) one
LEFT JOIN (SELECT RANK() OVER (ORDER BY column2) AS id, 
                  column2 
           FROM table2) two ON one.id = two.id