返回列表 发新帖

sql server的 update from 语句的深究

598.6k 8
swmozowtfl 发表于 2015-7-18 00:13:01|湖北 | 查看全部 阅读模式
一般来说update一个表, 使用where语句即可:
" f' x2 \! L$ Y' m/ p0 ]* f代码如下:
$ C: q& [" ]- C: U! c# \$ h& X
update ttest set
4 e4 e, H+ Z. J; q5 d4 A/ R9 }statusind = 'active'
3 v  ~7 a" C, l" s1 I0 gwhere
# g% J# V9 O7 }- wid = 123# s7 P" P& h% ]# B1 a
注意:
# H9 ]) e# ?5 A- O4 @  @  Mupdate 语句后面的table名称,是不可以启用别名的。
, z: s) @8 a5 ^那么此时的id字段,就是来自ttest表的(无可厚非)& m* ]* N4 f3 F7 o5 z( f' b
但是,如果update,还有额外的join table 条件约束,语句如下:( Z5 k" ?7 d3 C1 p4 F. T
代码如下:. }* Y2 c/ K# u
update ttest set
7 C/ O/ X, |. u/ ?5 N4 a' D  mstatusind = 'active'- J2 z) J* e- s7 X1 ?% U. u, E' t
from$ s' W7 R# H9 ~4 _& }: G% Z) U4 V
tparent parent2 a& I9 \6 X2 o  S0 R
where  m* C# }  z# l$ |5 g+ H* Q; y
ttest.id = 123
* @* F' q0 b5 [& {and ttest.parentid = parent.id
) R1 V+ v/ Z5 V0 q* ]5 Hand parent.statusind = 'active'
0 b- l0 b6 {2 g, n+ u注意:
' V( J. T/ ^* t  f3 [2 {: A- [update 后面的ttest 不能使用别名
* L! z9 S# y* R% ~# u9 C那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123  a/ G" y( Y8 ~. `
如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id
) q$ D0 l$ G' Y此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'7 h9 L- S8 V0 D$ m  A8 Y8 K
此时,层级关系是使用两个表(ttest和tparent)来定义 。9 V- Q( }' ]2 n
但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),( B2 i; p% B2 C
如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active')+ o# S, }+ v- R1 G; Y
实现如下:
. u/ i( y% |' G0 C8 H- L代码如下:
) V. X! q* C  U( B% A
update ttest set& _; ^) k5 ?) h+ q0 c
statusind = 'active'
/ d  y) d4 l- Z8 [6 ffrom  [$ N; C, M: T$ u6 ~, B0 f# h
ttest parent,- r+ I- x, ?7 G3 v% a3 J
ttest
! z( x8 i& ]$ C/ o9 m! v& W5 ~+ y/ Rwhere; d4 I4 \8 [6 x# ~2 l- N
ttest.id = 123( v  Z, `/ g; @4 _+ l, U9 R
and ttest.parentid = parent.id; @, M% {0 r) e. h( P0 s
and parent.statusind = 'active'
& z( t3 z# p1 _% R; t% `8 x解释:
' X! G1 H: x' H7 ^+ g, {9 e其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
! C. b1 `7 z# ?( H1 n% Nupdate 后面的表(ttest)不能,命名别名!
4 j. C& W. e; T7 t* ]. `8 D' Y% Ofrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)
) E, F/ l( N/ Z" M$ x3 t) S& s1 U: p% g- C+ l
更多网页制作信息请查看: 网页制作

回复|共 8 个

wwdu926a 发表于 2015-10-23 10:19:03|美国 | 查看全部
求您了,给个机会
seazvyt 发表于 2015-10-23 10:20:13|北美地区 | 查看全部
看起来好~~像啊~~~~~
Acropozelan 发表于 2015-10-23 10:20:16|美国 | 查看全部
还没崇拜过谁呢,满足一下愿望吧,谢谢!
buingeEvineus 发表于 2015-10-23 10:20:19|韩国 | 查看全部
(⊙o⊙)…好长啊,我虽然回复不了那么多字,但十五字还是有的。
tohme 发表于 2015-10-23 10:20:23|美国 | 查看全部
嘻嘻~` 要是只看你的话~`~`` 很容易让人家以为你也跟偶们一样是天使类~`(偷笑中````````
GoodyFouppy 发表于 2015-10-26 11:40:44|德国 | 查看全部
希望这样的好贴多些,再多些!!!
alapScady 发表于 2015-10-26 11:40:57|INNA | 查看全部
呵呵 那是啊~~
seazvyt 发表于 2015-10-26 11:41:51|美国 | 查看全部
哥们,给我做个链接吧

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表