我有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
答案 0 :(得分:0)
在这种情况下你应该使用外键:
CONSTRAINT FK_Column1Column2 FOREIGN KEY (Column1) REFERENCES Table2(Column2)
答案 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
)