返回列表 发新帖

sql server的 update from 语句的深究

599.0k 8
swmozowtfl 发表于 2015-7-18 00:13:01|湖北 | 查看全部 阅读模式
一般来说update一个表, 使用where语句即可:" r! s$ v* g- }" ?. L. F( U- I
代码如下:! C& j( k: S2 M! D3 `
update ttest set
2 {3 a. L: c! mstatusind = 'active'0 S, U- U& l; w6 N, k/ ~0 O! H. ]
where; T1 Z6 Y5 B7 }/ M3 ^; A& j3 `- w
id = 123
1 g/ ]) W: G' H7 R; n注意:
$ z. G: e5 j1 K+ D8 z3 }update 语句后面的table名称,是不可以启用别名的。, h3 X' M" h2 J4 G6 E
那么此时的id字段,就是来自ttest表的(无可厚非)- d5 k, S( J' M( u- p
但是,如果update,还有额外的join table 条件约束,语句如下:( B+ i8 F) j9 ]- Y, G
代码如下:
! L& R+ @( j. w7 z
update ttest set
$ j7 B& e- G, ^' E% l7 T% Ostatusind = 'active'8 f9 Y5 @: H) e" L# r
from
% m  ]" ?, F9 S; ktparent parent
! N3 p, }7 u+ _( R5 h6 twhere( S& y$ X: O+ w/ {( a) d8 h! p
ttest.id = 123( V" F& i2 N3 u, e/ K
and ttest.parentid = parent.id
; d3 M) o2 C5 uand parent.statusind = 'active'
5 b3 [% u0 W4 a( R4 C注意:
: y% g1 B/ _7 Fupdate 后面的ttest 不能使用别名. O/ T; c2 o% n4 |
那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123
  g) H# h: z7 N5 g. a/ c6 \如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id/ @* A6 u* g, d. \  L; L# x+ P* `2 p
此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'; s4 q' i% t% k4 D9 ?
此时,层级关系是使用两个表(ttest和tparent)来定义 。. R7 `+ e' R$ L* I
但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),
1 E! c% ]$ y' M! i0 E如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active')
  V# c6 ?& u/ W- K* ?: t. |实现如下:
1 H1 z* M' I( r9 f  J' M; B0 k代码如下:' m( K8 h0 B* F
update ttest set7 Y7 s6 \/ J* m- N( L2 r# ]
statusind = 'active'
" r% ?" P) O, i# v$ w' Wfrom! ?$ {2 o+ H$ c( }' V0 W' {& P5 e
ttest parent,
! G& X$ |1 X$ J+ u  ]( H+ k6 ]ttest. X* \" P' X% G
where0 `& ]) @) X9 _$ h
ttest.id = 123
+ v% G( F4 Y' q8 ]/ @4 Aand ttest.parentid = parent.id8 p& W5 B$ h$ W  R0 d
and parent.statusind = 'active'
( `8 y  g2 ^& U7 T$ Q0 W( v解释:
# N& Y# {3 |  A) w5 A8 a其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
6 o% {# X; Z( W. C; k/ aupdate 后面的表(ttest)不能,命名别名!
. F; s0 Z; |$ N6 y9 Yfrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)+ C3 G7 m6 K! M% F
4 w7 u; Q3 X" v. w( u$ }
更多网页制作信息请查看: 网页制作

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