一般来说update一个表, 使用where语句即可:
" f' x2 \! L$ Y' m/ p0 ]* f代码如下:
$ C: q& [" ]- C: U! c# \$ h& Xupdate 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% Aupdate 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
更多网页制作信息请查看: 网页制作 |
|