繁体   English   中英

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

[英]SQL Add columns from a table as new columns to another table

我有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 

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

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

在此处了解外键

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

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

INSERT用于将新行添加到表中。 但是,您要执行的操作是将Col3和Col4添加到table1中,然后使用Table2和Table3中的值更新Col3和Col4。 正如问题中未提到的那样,我很有趣,表2和表3中的行1的数据将转到表3中的行1。 这有点棘手,因为在任何表中都没有匹配的键值来将行连接在一起。

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

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

如果订单不重要,可以尝试一下

Alter table table1
Add Column3 int 


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM