返回列表 发新帖

sql server的 update from 语句的深究

598.5k 8
swmozowtfl 发表于 2015-7-18 00:13:01|湖北 | 查看全部 阅读模式
一般来说update一个表, 使用where语句即可:0 z  O8 p) D" s7 g+ H. H7 U
代码如下:. E: p  {; Z2 K8 _: P; i4 i
update ttest set
, t5 W( Z# {+ I/ Kstatusind = 'active'* [7 ]7 r5 O0 X5 e* q3 K
where
  W7 ~9 n6 s' ~, p: Wid = 123! V/ H$ G4 l; `0 t: U/ t5 S
注意:
8 J2 e0 [- n0 |2 pupdate 语句后面的table名称,是不可以启用别名的。
: p7 N) L6 J( V6 F) G那么此时的id字段,就是来自ttest表的(无可厚非)
, f( x4 I+ q: U/ {但是,如果update,还有额外的join table 条件约束,语句如下:8 [" h1 ~& I3 u2 t
代码如下:" t& N% V: u; `9 m+ ^
update ttest set) L0 a" B# x, @
statusind = 'active': l" G9 l6 a; Y0 t- T1 |* j* e6 u# v
from: q& @6 I6 y! F$ o8 x5 V4 @
tparent parent
% i, E! `( a# L9 F& mwhere; n  C3 ]! q3 z. Y# B, N  I/ V
ttest.id = 1235 G9 t& r2 @* z( p1 ~
and ttest.parentid = parent.id/ E$ v& o0 Z$ }5 X9 {6 k
and parent.statusind = 'active'
. p3 B+ v8 u' p% x. \0 S/ Q( Y注意:5 N1 m0 ]7 c) U& E, {; Q' a; b: L
update 后面的ttest 不能使用别名* x5 p- N& x: z, f9 K. m, c, L
那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123
2 X5 |2 i7 H3 I, z如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id1 O6 x" }$ Y/ N& W! f8 v1 A4 k
此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
; n1 i+ N6 U# I9 D此时,层级关系是使用两个表(ttest和tparent)来定义 。
) p$ y8 P( n- `  i, u, L9 E% Z但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),
) A! N, p9 ]2 W2 |6 R# e如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active')
) K( L8 r# A& I实现如下:
. V( P* c, i$ [. h/ O- |* A代码如下:9 U5 ~/ ?3 m/ V% P6 {: {% e
update ttest set
: S) M; X2 C# O: p- F) pstatusind = 'active'/ d2 t( W" w, U! X
from# }' v* x0 a  t/ D7 U9 r1 t
ttest parent,1 U' n# [1 G) i1 h) x$ A/ R
ttest
1 c; m  C3 ]1 f& {4 |; Owhere  O/ C1 M& ^3 i' f
ttest.id = 123' C0 x; S/ B- ~2 p4 y" u: ]8 q$ y
and ttest.parentid = parent.id1 E4 Y) N3 o. Q$ c; r3 e
and parent.statusind = 'active'4 y4 X- T& F4 C( D- W
解释:6 r8 G6 [7 E3 {
其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active', p) N% Z, N  ?; B8 E' j' D: _
update 后面的表(ttest)不能,命名别名!
0 _$ `3 d9 F: ?; v+ z3 afrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)5 |- H% B& [: z& v; o
* ?) P7 e- z* }4 e( A; M( ?) e
更多网页制作信息请查看: 网页制作

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