我意外更新了table2
数据列custno
的所有记录value ='33'
现在,我需要将custno
的所有列数据从table1
恢复到table2
(不影响其他数据)。
注意,其中任何一个表都没有主键。似乎有几个ID
正在重复。
table1
可能会多次ID
ID
,并且所有table2
都必须使用与ID
中相同的id col1 col2 col3 col4 colN custno
1 1 dhruv joshi 3 2 12
1 1 alpha beta 3 2 12
1 1 ebta alpha 3 2 12
1 1 dhruv joshi 3 2 11
1 1 alpha beta 3 2 11
1 1 ebta alpha 3 2 10
相同的日期值填充id col1 col2 col3 col4 colN custno
1 1 dhruv joshi 3 2 33
1 1 alpha beta 3 2 33
1 1 ebta alpha 3 2 33
1 1 dhruv joshi 3 2 33
1 1 alpha beta 3 2 33
1 1 ebta alpha 3 2 33
}。
非常感谢任何帮助。
-------------------所以这里是更新的实际场景:-------------------- -----
表1(上表处于良好状态)
custno
表2(意外更新所有记录的custno = 33)
table1
现在我必须将此表格2列(UPDATE t2
SET t2.custno = t1.custno
FROM table1 AS t1
JOIN table2 AS t2
ON t1.ID = t2.ID
AND t1.col1 =t2.col1
AND t1.col2 =t2.col2
AND t1.col3 =t2.col3
AND t1.colN =t2.colN
)完全恢复为id col1 col2 col3 col4 colN custno
1 1 dhruv joshi 3 2 12
1 1 alpha beta 3 2 12
1 1 ebta alpha 3 2 12
1 1 dhruv joshi 3 2 12
1 1 alpha beta 3 2 12
1 1 ebta alpha 3 2 12
而不触及任何其他列。
我希望现在能清除这种情况。
更新此查询后,会产生意外结果。
{{1}}
出乎意料的结果是
{{1}}
答案 0 :(得分:1)
如果表中没有任何唯一列,则必须在(表的)多个列上应用条件,以便使行唯一可识别以进行更新。
示例,如果您的表定义为table1[ id int, col1 int, col2 varchar(100), col3 varchar(100), col4 int,..., colN int, customerNo int)
并且没有唯一列。
然后根据customerNo更新它只会造成问题。
方法是识别多个(或所有)列,使其在更新期间更加独特。
UPDATE t2
SET t2.custno = t1.custno
FROM table1 AS t1
JOIN table2 AS t2
ON t1.ID = t2.ID
AND t1.col1 =t2.col1
AND t1.col2 =t2.col2
AND t1.col3 =t2.col3
..
AND t1.colN =t2.colN
小提琴链接http://sqlfiddle.com/#!6/ff9895/2 PS:这本来是一个问题评论,但因为它太大了,我把它作为答案
我也想知道你是否有一个桌子后面为什么不简单地将它恢复到原始表格中
-- This deletes all rows
DELETE FROM table2 WHERE Id IS NOT NULL
-- This inserts all rows from table1(the original table) into table2 to make it like table1
INSERT INTO Table2
SELECT * FROM Table1
答案 1 :(得分:0)
我不太了解但是如果表格结构相同,你可以试试这个: -
Update t2 set t2.custno = t1.custno
from
(
select ROW_NUMBER() over (order by col1 asc)as RANK, * from table_1
)t1
Inner join
(
select ROW_NUMBER() over (order by col1 asc)as RANK, * from table_2
)t2
on t1.RANK = t2.RANK