[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