一般来说update一个表, 使用where语句即可:- P' w0 d m! k
代码如下:4 ]' F- R& e" o( ?5 ^
update ttest set/ {5 J% N9 q- k- A7 V
statusind = 'active'+ z' z/ b& @* [) P# q
where
8 x& G H3 z& o6 W0 D: ~' Wid = 123
$ e, e9 B6 L4 {2 s5 L; i# Z: E注意:
( ~2 N& w- P" H2 S4 f3 G8 f- \update 语句后面的table名称,是不可以启用别名的。+ k1 q% D; E) b
那么此时的id字段,就是来自ttest表的(无可厚非)' {" i6 A9 I }( ^! _# I% C
但是,如果update,还有额外的join table 条件约束,语句如下:
# B, f; @! H3 R+ U代码如下:
( p6 d9 W- `9 B- G, U* C+ dupdate ttest set C: v' @& y: D* N5 R# c2 E0 Y! N1 H
statusind = 'active'
5 k" J0 h. ~7 U& Hfrom+ p e/ |* [$ Z8 e# I' D/ J
tparent parent8 C+ o! M, X" u( w! l+ f" w
where; P4 P% ]5 H& p: @5 A' j
ttest.id = 1238 M" O( m$ m, G- |" K
and ttest.parentid = parent.id. z, E7 [- D3 B! C
and parent.statusind = 'active' G t l* U% F, n
注意:( h1 H( q' k; f9 p" c
update 后面的ttest 不能使用别名
1 Q2 w$ X- `: T( h8 b' k: I- x那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123
6 k+ I, f9 U* y+ P+ T如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id
( W3 l% {( V4 K% H$ n此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
9 |: E3 ], H# n& X$ U此时,层级关系是使用两个表(ttest和tparent)来定义 。
" U6 r% d- J7 Z: g4 Y! {. t' ?7 h但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),* ^( ?2 K& M6 {5 }
如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'), J+ _! j: r4 j9 _/ t# m/ e
实现如下:" J$ F( p0 `1 Q) u% {
代码如下:2 Q" o/ a+ ?4 j% w6 B. k) |2 r
update ttest set& Z' O: H/ X% ^
statusind = 'active' ~, q+ R' K" g2 q6 L. f; K& O
from4 e) z, e5 }2 g& ]+ r# ~
ttest parent,
- M& `* l2 d5 d: B/ k" Tttest! _) p- H, z0 o
where; ]; K" p% m) _: @0 `+ Q7 h4 A
ttest.id = 123
9 v4 d2 P t% @9 B8 g6 v \and ttest.parentid = parent.id
+ V( u6 \3 T! O6 n, tand parent.statusind = 'active'$ ?/ I; b# P% }' M
解释:
" D: ^4 r, P8 A$ t. E& j: P其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'7 A$ X1 I: x; v# B; j
update 后面的表(ttest)不能,命名别名!
! O: N" ~& Q6 lfrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)
5 `7 Q$ i! x+ m9 D& k; W+ _8 H* F; P3 N8 s: v* F
更多网页制作信息请查看: 网页制作 |
|