SQL update语句正在执行,但使用不正确的值进行更新

时间:2014-08-19 00:03:04

标签: sql sql-server

我正在尝试使用来自不同表的值更新我的一个表。 update语句会执行,但不会使用正确的值更新列。

例如,

这是table1,我想要从SID更新列table2 enter image description here

这是table2,其中列SID包含我需要的值。

enter image description here

我正在尝试完成的是从table1更新table2 uIDNO相等而table1.NO不为空

我是这样做的:

update c1 set c1.SID = c2.SID
from table1 c1, table2 c2
    where c1.UID = '09999138181408374834'
    and c1.NO = c2.NO
    and c1.NO is not null

它会更新5行,但这是输出:

enter image description here

table1中的更新SID与table2中的SID不同

有关它为何发生以及如何解决的任何建议?

1 个答案:

答案 0 :(得分:2)

通过验证此查询是否返回更新的正确元组来启动调试过程:

select
     c1.NO as NO_target
    ,c2.NO as NO_source
    ,c1.SID as SID_old
    ,c2.SID as SID_new
from table1 c1
join table2 c2
   on c1.NO = c2.NO
  and c1.UID = c2.UID   -- I believe this line is needed to prevent a partial Cartesian product
where c1.UID = '09999138181408374834'
  and c1.NO is not null

上面的查询返回正确的更新元组后,更正更新的过程很简单。