[英]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.