[SQL ] update语法

楼主: kisha024 (4545454554)   2014-09-25 11:06:35
数据库名称: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'
这样更新就很明确 不会有模棱两可的情况了
所以 是不是上面的写法不够好 不够明确 应该要更改?
谢谢
作者: GoalBased (Artificail Intelligence)   2014-09-25 12:20:00
说明一下你的需求吧 你是要把T1的name 改成什么?
作者: SeanBoog (施吉祥先生)   2014-09-25 12:34:00
写法对 但结果不是你要的 那你想要的是什么?
作者: GoalBased (Artificail Intelligence)   2014-09-25 12:50:00
同楼上..语法没错..但不知道你要的是什么阿
作者: moyasi (Simple Life)   2014-09-25 13:13:00
执行会过写法就一定是对的 重点是你想要的是什么
作者: GoalBased (Artificail Intelligence)   2014-09-25 14:04:00
如果你希望得到的Nc是xxx 那你就用left join至于right join的顺序为什么会变成第一个和最后一个来回交错,我测了半个小时,还是不知道为什么我也跟你说了 我不知道 QAQ
作者: jengting (~~)   2014-09-26 07:52:00
请参考这篇讨论 http://ppt.cc/Y9MT
楼主: kisha024 (4545454554)   2014-10-02 10:53:00
感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com