返回列表 发新帖

sql server的 update from 语句的深究

599.0k 8
swmozowtfl 发表于 2015-7-18 00:13:01|湖北 | 查看全部 阅读模式
一般来说update一个表, 使用where语句即可:; R- G7 W  L: {  Y. d: N5 f
代码如下:; {0 o* Y( c# G: w  X2 p$ \
update ttest set! H. J& c+ v0 _+ _" m/ v, }2 [
statusind = 'active'
$ Y/ y; _" a* F# nwhere: `% @) i3 y- S
id = 123+ y) m' k( g9 A( A6 I
注意:
- X' _4 v2 C/ [5 T% {3 }/ Mupdate 语句后面的table名称,是不可以启用别名的。
. B' l. a  N6 w) F那么此时的id字段,就是来自ttest表的(无可厚非). Z* D/ I5 N' p$ w' o* _. u
但是,如果update,还有额外的join table 条件约束,语句如下:8 Y" S8 {$ ^- W& J+ \4 b( `& |
代码如下:
% P& V7 ]. q5 o
update ttest set: p1 w+ z3 c9 Z& W
statusind = 'active'  B- ?: U" t! C
from
  Y% {# y# J2 m8 N" _' ^tparent parent& Y) @/ M$ r0 ]+ d4 A
where
6 r! U* P9 x' w* Attest.id = 1238 L8 W- \0 r: Q2 z3 q# z* T
and ttest.parentid = parent.id
4 L8 ^$ X+ l. r" J* Band parent.statusind = 'active'
# }% }7 D% E7 ~; @& O+ x注意:
2 @' E1 E$ M8 F' b& O/ A, C- mupdate 后面的ttest 不能使用别名
  v0 [8 f* k7 l; p+ w' {/ @: U那么定位到,要修改的ttest记录,就必须这样写:ttest.id = 123
- u# G% Q7 T, p/ B5 L如果直接写id=123, 会分不清是 ttest 表 还是 tparent 表的 id( J6 q* j1 E$ V
此sql语句的意思是,如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
8 n9 R, A' T4 T  v此时,层级关系是使用两个表(ttest和tparent)来定义 。
, n6 P/ c  T  a! I0 Q但是如果,数据库表的设计,只是用一个表(ttest),来表述数据之间的层级关系(ttest.parentid = ttest.id),
8 R7 @, F4 d6 n1 I% j) }- {/ ?如何书写,可以实现目的呢?(如果想修改自身的statusind属性,得关联其parent的statusind属性是否也是'active')) H& ~: U6 p+ [2 B9 H6 R' ~& R* n
实现如下:
# N+ H; _: \; f) J1 i代码如下:
+ s2 n2 E; G- I  Y+ j
update ttest set
2 G1 N/ W; B8 ?+ T" D/ B. ?; Nstatusind = 'active'5 O- l: X2 L- }6 W
from$ c% |7 o" C& c) v( p' q
ttest parent,- ?5 N' k: c* p$ T3 V  }
ttest1 Z+ s& t" B2 z3 o$ B
where
7 R: I' b# N, Vttest.id = 1232 f1 [4 C- H/ x: r! S' J
and ttest.parentid = parent.id
) _, U8 v% x5 V# V: Q) e! nand parent.statusind = 'active'
& Z8 |3 N- N! E/ B) U; p解释:  O2 W) {+ m. q) S
其需求是:修改自身的statusind属性,得关联其parent的statusind属性是否也是'active'
# A# `! w' A+ ]/ \9 Cupdate 后面的表(ttest)不能,命名别名!
5 G# I2 e2 I1 r$ B& O9 v( z, c+ ]6 _7 Vfrom 后面的表 也是 ttest,但是 要update的ttest 记录 和 from ttest 记录并不一样 (要update 孩子,但是要from 关联其父亲)0 i1 d" }6 l0 Y7 M0 h/ z
0 Q2 p2 `. @" \( p9 r
更多网页制作信息请查看: 网页制作

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