返回列表 发新帖

sql server的 update from 语句的深究

598.8k 8
swmozowtfl 发表于 2015-7-18 00:13:01|湖北 | 查看全部 阅读模式
一般来说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$ Y
update 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, f
update 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
更多网页制作信息请查看: 网页制作

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