SQL将表中的列作为新列添加到另一个表中

时间:2017-11-08 08:24:59

标签: sql sql-server-2012

我有3张桌子。它们具有以下结构

表1(第1栏,第2栏);
表2(第3栏);
表3(第4栏)

我想让表1显示第1列,第2列,第3列,第4列

我试过了:

Alter table table1
Add Column3 int 
Insert into table1(Column4)
Select Column3 From table2

我在表1中得到以下内容:

Column 1    Column 2    Column 3
VAL1        VAL1        NULL
VAL2        VAL2        NULL
NULL        NULL        VAL1
NULL        NULL        VAL2

但我想得到:

Column1     Column2    Column3
VAL1        VAL1       VAL1
VAL2        VAL2       VAL2 

4 个答案:

答案 0 :(得分:0)

在这种情况下你应该使用外键:

CONSTRAINT FK_Column1Column2 FOREIGN KEY (Column1) REFERENCES Table2(Column2)

read about foreign keys here

答案 1 :(得分:0)

如果您要使用现有值添加和更新列,请使用以下查询

WITH CTE AS
   (
     SELECT ROW_NUMBER() OVER (ORDER BY COL1) rnO,COL3,COL1 FROM TABLE1 UNION ALL 
     SELECT ROW_NUMBER() OVER (ORDER BY COL3) rnO2, COL3,NULL FROM TABLE2

   )
UPDATE TABLE1 SET COL3 = CTE.COL3 
FROM CTE WHERE TABLE1.COL1 =CTE.COL1 

SELECT * FROM TABLE1

答案 2 :(得分:0)

INSERT用于向表中添加NEW行。您要做的是将Col3和Col4添加到table1,然后使用Table2和Table3中的值更新Col3和Col4。由于问题中没有提到,我很开心,表2和表3中Row1的数据将转到table3的row1。这有点棘手,因为任何表中都没有匹配的键值来将行连接在一起。

解决此问题的一种简单方法是向每个表添加ID字段,然后使用它在UPDATE查询中将具有相同值的行链接在一起。另一种方法是使用PARTITION,但由于数据没有定义索引,因此每个表中行的顺序未定义。

第三个选项是使用存储过程创建三个包含自动递增[id]字段的#temp表,然后将每个表中的数据附加到每个临时表中。然后临时表可用于更新table1的#temp表副本中的字段,最后数据的#temp表副本(现在包含table1,2和3中的所有字段)可用于更新table1加入#temp table to table1 on column1 and column2。

答案 3 :(得分:0)

如果订单不重要,您可以尝试此操作

Alter table table1
Add Column3 int 


update table1 t1
set Column3 = (select colum3
    from table2 t2
    where t1.rownum = t2.rownum
)