我有两个表:Table1和Table2
表1
id name value source
----------- ----------- ----- ------------
1 a 4 10
2 b 5 10
3 c 6 11
表2
set text
----------- -----------
7 h
8 g
我想复制'值'表1中的表2的列where table1.source = 10
set text value
----------- ----------- ---------
7 h 4
8 g 5
我试过了:
ALTER TABLE Table2 ADD value INT NOT NULL DEFAULT 0
UPDATE tb2
SET tb1.value = tb2.value
from Table2 tb2
JOIN Table1 tb1
ON tb1.source=10
它给了我这个:
id name value
----------- ----------- ---------
7 h 4
8 g 4
它只使用Table1中的第一个source
值更新Table2行。
我做错了什么? 提前谢谢!
答案 0 :(得分:0)
也许你可以试试这个:
insert into table2 (value) select (value) from table1 where table1.source = 10
只需添加新的"值" " table2"中的字段并尝试这种方法。
答案 1 :(得分:0)
如果您使用的是sQL服务器,请使用以下查询来更新table2。 请注意,该脚本特定于给定的样本数据。
ALTER TABLE Table2
ADD value INT NOT NULL DEFAULT 0
GO
WITH cte_data
as
(SELECT ROW_NUMBER() OVER(ORDER BY [set])RNo,*
FROM Table2 )
UPDATE c
SET c.Value=t.Value
FROM cte_data c
JOIN Table1 t on c.RNo=t.Id
WHERE t.Source=10
答案 2 :(得分:0)
您需要连接的行号。我建议把它放在两个表中:
WITH toupdate AS (
SELECT tb1.*,
ROW_NUMBER() OVER (PARTITION BY source ORDER BY id) as seqnum
FROM table1 tb1
)
UPDATE toupdate
SET tb1.value = tb2.value
FROM toupdate tb1 JOIN
(SELECT tb2.*,
ROW_NUMBER() OVER (ORDER BY set) as seqnum
FROM table2 tb2
) tb2
ON tb2.seqnum = tb1.seqnum
WHERE tb1.source = 10;