返回列表 发新帖

sql server的 update from 语句的深究

598.6k 8
swmozowtfl 发表于 2015-7-18 00:13:01|湖北 | 查看全部 阅读模式
一般来说update一个表, 使用where语句即可:! {0 Q5 x8 j2 ^9 q# p
代码如下:! K% j6 k, @9 q# s9 x# X
update ttest set
! |# x9 w( F# m2 Zstatusind = 'active'% R. m4 X6 y- M/ L
where. F/ v0 r' ?$ c& B# R
id = 123
' Q- @* d3 y; ?, D9 U! l注意:
2 S9 I8 V( @: K' q' K$ Mupdate 语句后面的table名称,是不可以启用别名的。
( t- N( l! i. Z% n4 u+ ]( T6 o5 Q那么此时的id字段,就是来自ttest表的(无可厚非)+ G$ ]  j2 K/ n8 p
但是,如果update,还有额外的join table 条件约束,语句如下:/ r2 j4 a$ t. X8 h2 H+ b
代码如下:2 ]6 F8 X% `8 s" M2 ^# |  }! k' w
update ttest set1 {, k& K& z! V# P# C) f
statusind = 'active'+ @& V& \# F8 G3 g. l1 Y; \
from
, @( Q. Z& A! m0 T. x. \% b7 A8 ?tparent parent8 z2 u- [9 U' u# [( {% z8 Z; ^6 Q
where% F. T5 x4 L0 f
ttest.id = 123
  y2 k5 [' C$ Y" w  C5 x, Wand ttest.parentid = parent.id  l# A% ^- v* |7 F8 M- I" c+ U
and parent.statusind = 'active'2 M2 b5 K3 B2 X/ y& I
注意:- {' }' g2 N5 _4 @( \
update 后面的ttest 不能使用别名
3 U% o2 B8 p& @$ }, j- Y- i, P那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123
! q: u# X1 J, F5 ]/ ]如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id3 p6 O3 K7 R- t- w* D8 K6 e
此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'! Z5 i2 Z6 t2 O7 H' x
此时,层级关系是使用两个表(ttest和tparent)来定义 。: S0 q, _/ ]. ]
但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),
1 ^6 c: j& [6 S8 f8 {如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active')
9 [  V# j) A4 g* q6 k9 O0 v( H实现如下:
, I& h' \# x& x" w代码如下:
0 w( i: P6 C: _* ^
update ttest set& z3 Q+ a$ P6 {5 e
statusind = 'active'9 B; k, x# ?0 J" X
from
, r( K0 q3 P) n1 [ttest parent,
4 O: M7 @' u/ W. o1 b! b! Dttest
6 L6 K' x8 b+ `where
/ ^5 K+ d5 u, ~0 R; ~. O4 |ttest.id = 123
( ?9 f5 M# r2 W8 a, g6 X3 u3 M- ]and ttest.parentid = parent.id1 Q  i$ @: f4 w: n) i* }
and parent.statusind = 'active'
' e* O5 I% V8 X9 }9 t* g解释:! P' t' I! R( y6 I6 g) N2 l
其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'- x  ?4 [3 w2 k# X5 Q4 [- l* c
update 后面的表(ttest)不能,命名别名!
) j; h8 W+ r8 m& Ofrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)0 e& a; [/ L/ C$ i$ z6 V
$ ^( u- F( c% K; s3 F4 s% Q* x4 m
更多网页制作信息请查看: 网页制作

回复|共 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客服 返回顶部
快速回复 返回顶部 返回列表