[爆卦]sql server update語法是什麼?優點缺點精華區懶人包

為什麼這篇sql server update語法鄉民發文收入到精華區:因為在sql server update語法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者kisha024 (4545454554)看板Database標題[SQL ] update語法...


資料庫名稱: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'

這樣更新就很明確 不會有模稜兩可的情況了

所以 是不是上面的寫法不夠好 不夠明確 應該要更改?

謝謝


--
※ 文章網址: http://www.ptt.cc/bbs/Database/M.1411614397.A.9F5.html
GoalBased: 說明一下你的需求吧 你是要把T1的name 改成甚麼? 09/25 12:20
我的需求僅是了解這樣的語法是不是有問題?
SeanBoog: 寫法對 但結果不是你要的 那你想要的是什麼? 09/25 12:34
GoalBased: 同樓上..語法沒錯..但不知道你要的是甚麼阿 09/25 12:50
moyasi: 執行會過寫法就一定是對的 重點是你想要的是什麼 09/25 13:13
GoalBased: 如果你希望得到的Nc是xxx 那你就用left join 09/25 14:04
GoalBased: 至於right join的順序為什麼會變成第一個和最後一個 09/25 14:04
GoalBased: 來回交錯,我測了半個小時,還是不知道為什麼 09/25 14:04
其實這正是我想知道的
如果我想要透過T2的某欄位來update T1的某欄位 應該要用left join
我不知道的是 萬一誤寫成right join 導致T1同一筆資料出現好幾次 update時會怎樣?
實測就是如內文所述那樣 和你說的交錯
※ 編輯: kisha024 (203.64.120.93), 09/25/2014 14:23:46
GoalBased: 我也跟你說了 我不知道 QAQ 09/25 14:41
沒關係 還是很感謝大家的回答 我覺得仍然很有幫助
我上面說的不是很正確 應該說不管是left join 還是right join
只要 on 和where 過濾得宜 讓想要update的那張table的每一筆資料最多都只出現一次
這樣update就不會有模稜兩可的情況了

※ 編輯: kisha024 (203.64.120.93), 09/25/2014 15:27:33
jengting: 請參考這篇討論 http://ppt.cc/Y9MT 09/26 07:52
kisha024: 感謝 10/02 10:53

你可能也想看看

搜尋相關網站