这是最终脚本的样子。
UPDATE [Valve_evw] SET [Valve_evw].[MA] = ( SELECT [Valve_Join_evw].[MC] FROM [Valve_Join_evw] WHERE[Valve_Join_evw].[PrimaryKey] = [Valve_evw].[PrimaryKey] ) WHERE [Valve_evw].[PrimaryKey] IN ( SELECT [Valve_Join_evw].[PrimaryKey] FROM [Valve_Join_evw] WHERE [Valve_Join_evw].[MA] != [Valve_Join_evw].[MC] );
首先,让我们减少眼睛伤害SQL的真实情况:
update sde.sy1.valve_evw set ma = (select mc from sde.sy1.valve_join_evw) where primarykey in (select primarykey from sde.sy1.valve_join_evw where ma <> mc)
的 WHERE子句 强>
我们寻找所有人 primarykey 在 valve_join_evw 哪里有记录 ma <> mc 。我们更新所有 valve_evw 有这样的记录 primarykey 。
primarykey
valve_join_evw
ma <> mc
valve_evw
的 SET子句 强>
对于我们想要更新的记录,我们设置 ma 找到的值:
ma
select mc from sde.sy1.valve_join_evw
但是这个查询没有where子句,所以它选择什么值来填充记录 ma 领域?它选择 所有 mc 从 valve_join_evw 因此DBMS可能会随意选择其中一个值。 (它会更好,它会引发错误。)
mc
的 结论 强>
很容易看出语句将更新哪些记录。
哪一个 primarykey :
select primarykey from sde.sy1.valve_join_evw where ma <> mc
哪些行:
select * from sde.sy1.valve_evw where primarykey in (select primarykey from sde.sy1.valve_join_evw where ma <> mc)
至于 SET 子句:添加一个 WHERE 子查询的子句,用于将记录与要更新的记录相关联(相同 ma ?相同 primarykey ?)例如:
SET
WHERE
set ma = ( select mc from sde.sy1.valve_join_evw vj where vj.primarykey = valve_evw.primarykey and vj.ma = valve_evw.ma )
您好我首先建议您执行select语句,当您检索到te记录时,请使用相同的更新语句