一般来说update一个表, 使用where语句即可:
% K; [* k% d+ G n: Z3 z代码如下:0 I9 J3 \: \. t& K9 }5 `7 A
update ttest set+ { ^5 k; N" @, p! m+ S( ?, D" [
statusind = 'active'6 ~" I/ ]+ a. u! R# ?0 l! p
where
& @) y$ C8 p. mid = 123
+ \% Y& t0 r a r注意:+ D+ p6 r1 X2 N& V7 R
update 语句后面的table名称,是不可以启用别名的。
0 w1 u R' x5 i |9 ^) Z那么此时的id字段,就是来自ttest表的(无可厚非)2 C Y2 l, G$ M K5 q' }
但是,如果update,还有额外的join table 条件约束,语句如下:
% n, `! j4 V( X2 A: d代码如下:
# y" U1 T2 U) Y$ Yupdate ttest set
% p- I1 z" W' q% pstatusind = 'active'/ J8 j' ?# t0 N/ Y' o
from. l/ s6 _4 Q9 n: Z+ v8 ~: X
tparent parent
0 K! K+ m4 u) w" F# p2 i# D: @where+ V5 w- V* b A0 |
ttest.id = 123: ~+ [, }+ t- f7 W
and ttest.parentid = parent.id% h( m# m* w1 s6 Y
and parent.statusind = 'active'
& C4 A( ]/ ?$ |/ W) U/ p" R6 d注意:
& G. D/ Z' ?& A4 _update 后面的ttest 不能使用别名
. P1 G! U( w J4 ^- S4 ~+ L$ ~那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123: l2 w, X5 V/ Y$ V# t
如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id# [6 m1 P) v" ~- d# J- }# t
此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
. N* C; m! Q) x/ |此时,层级关系是使用两个表(ttest和tparent)来定义 。
, r% ^- W/ l; i但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),8 A# E5 S$ y Q y1 y
如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active')1 Y7 U$ X, a, G1 v
实现如下:
3 i" g: m% g* C9 s- x代码如下:
$ [! E5 F8 n" I/ @" t$ Y5 F7 Z, fupdate ttest set
1 u3 H# ~+ ^6 |. ustatusind = 'active'
" R- ]" v7 {% R' K6 Afrom* }6 x5 R7 l4 i" W: d9 e# n! v
ttest parent,
0 r; e' I2 z) J6 U/ I+ ?ttest
/ X2 b; R: T0 t p: U: Gwhere6 [$ K1 `. g2 k" \. ]- d& y
ttest.id = 123
% I+ O0 _1 {6 S3 Wand ttest.parentid = parent.id
2 }# v& w# v ]# a& j% ~and parent.statusind = 'active'* Z, W7 q! M$ c6 e1 ~& ~
解释:$ p& A$ R7 ]8 `% z [
其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'" i- _0 e/ M6 Q1 X* g2 o/ D
update 后面的表(ttest)不能,命名别名!
" M$ C' H# Z, \$ ofrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)" W/ j, i2 d: K; L1 ^; C# E$ \1 L
6 ~, l4 |3 s( c% _$ E7 y2 c9 T
更多网页制作信息请查看: 网页制作 |
|