通过从查询中提供旧的和新的条目来更新表

时间:2014-02-24 10:44:15

标签: sql sql-server sql-server-2005

我为带有查询的表选择旧值和新值列表:

select new, old from SOME_TABLE; 

new         old
----------- -----------
1174154     1064267743
1174164     1072037230
1174167     1065180221
1174180     1071828953
1174181     1067402664
1174204     1073143287
1174215     1057480190
1174222     1061816319
1174331     1072011864
1174366     1061275972

现在我需要更新包含这些旧值的表,并用新的替换它们 的。

update OTHER_TABLE set some_column = <newvalue> where some_column = <oldvalue>

是否可以使用一个查询执行此操作,还是需要循环结果元组并更新每行?

无法更改数据库布局或编写自动执行此操作的触发器...

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

UPDATE OTHER_TABLE t1
SET some_column = (SELECT t2.new FROM SOME_TABLE t2 
                   WHERE t2.old = t1.old_value_column)

只需将old_value_column替换为OTHER_TABLE中包含旧值的列名,以及其他表和列名称。

答案 1 :(得分:0)

我不会将子查询用作afaik,您将为要更新的表中的每一行选择some_table。如果两个表中的行数都很大,则可能会遇到问题。因此,我建议使用下面列出的更新方法。

update t
set yourcolumn = n.new
from yourtable t
join some_table s
  on t.id = s.old