数据库名称:ms sql server
数据库版本:2008
各位好 昨天看到了一个update 写法 如下
T1的字段和资料如下
ID No Name
1 1 d
2 1 d
3 1 d
T2的字段和资料如下
ID No Na Nc
1 1 A X
4 1 B Y
7 1 C Z
update A set Name=B.Nc from T1 A right join T2 B on A.No=B.No
where B.Na in ('A','B','C')
如果只看 from 之后的语法 则会捞出九笔资料 但T1其实只有3笔资料
所以每笔都重复了3次
因此update后 到底会更新3笔 还是9笔? 我实际测试后得到 (3 个资料列受到影响)
也就是说 T1的每笔资料 都只会更新一次 既然如此
那T1的Name到底是要更新成 T2的哪个Nc值 是X 是Y 还是Z ?
我透过把 where B.Na in ('A','B','C') 改成 where where B.Na in ('B','C')
,where B.Na in ('A','C') ,where B.Na in ('A','B') 等几种不同条件去观察
但还是看不出更新的准则到底为何? 我本来是猜先出现的先更新
第二次以后出现的就不管他 但好像也不是
可以确定的是 如果捞出来的资料 T1部分每笔资料都只出现一次 EX: where B.Na='A'
这样更新就很明确 不会有模棱两可的情况了
所以 是不是上面的写法不够好 不够明确 应该要更改?
谢谢