2010-07-18 48 views
1

我有2个表,每个都有一个标识列。我想要做的是用这些身份填充一个新的2列表格,以便它能够识别身份。如何使用来自2个不同来源的无关数据填充2列表格?

现在,我完全能够使用其中一个表的身份填充我的新表的一列,但无法从另一个表中获取身份到我的新表中。如果这不是最好的第一步,请让我知道。

谢谢

+0

你怎么想 '配对身份'?您是否想要在其他属性上加入这两个表格,例如城市名称/州。 – 2010-07-18 23:12:24

+3

对不起 - 刚刚重读 - 你为什么要将两个_unrelated_数据表的身份放在一张表中? – 2010-07-18 23:13:47

+0

是的,我也想知道。我认为这不可能或有用,除非你可以定义它们之间的关系。 – 2010-07-18 23:16:09

回答

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) 
+0

太棒了。是的,它看起来像我只是有一些类型的关系。正如你在上面所说明的那样,通过创建两个表格,每个表格有两列,然后我可以创建一个“假”关系并同时将它们同时带入。非常感谢! – gorndor 2010-07-18 23:30:21

1

您可以填充一个表与INSERT...SELECT语法和SELECT可以是两个(或多个)表之间的连接的结果。

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

所以,如果你可以表达配对作为SELECT,你可以将其插入到你的表。

如果这两个表是不相关的并且没有办法表示配对,那么您问的是如何创建非关系数据存储,并且没有关系规则。

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 
相关问题