这个语句怎么写?UPDATE

czx33859066 2012-08-06 07:13:20
有两张边
A表里面有5个字段(C,D,E,F,G)
B表里面有5个字段(C,D,L,M,N)

要更新B.L=A.E 条件是 A.C=B.C AND A.D=B.D AND A.F<B.M AND A.G>B.N

这条SQL语句怎么写啊?用UPDATE
...全文
195 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
筱筱澄 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
update B
set L = A.E
from A
where A.C=B.C
AND A.D=B.D
AND A.F<B.M
AND A.G>B.N

数据量大的话,怎么解决啊?
A表有1000W,B表有30W
[/Quote]
语句就这样了 建议分批次更新。

强调不一次性变更大量数据,主要是基于服务器压力的影响,一个操作涉及大量的数据的话,事务会变得很大,为了保证相关操作回滚导致的资源开销也会很大,而且一般操作时间比较长,容易对其他操作造成影响。
zhangwlkw 2012-08-08
  • 打赏
  • 举报
回复
就一楼那样把,暂时没太好的
tudiy 2012-08-08
  • 打赏
  • 举报
回复
update B set L = d.E from B c join (select a.c,a.d,a.l,a.m,a,n,b.E from B a  join  A b on  a.C=b.C  AND a.D=b.D  AND b.F<a.M  AND b.G>a.N )) d on c.d=d.d and c.c=d.c and c.l=d.l and c.n=d.n and c.m=d.m
以学习为目的 2012-08-07
  • 打赏
  • 举报
回复

update B
set L = A.E
from A,b
where A.C=B.C
AND A.D=B.D
AND A.F<B.M
AND A.G>B.N
lene3 2012-08-07
  • 打赏
  • 举报
回复

update B
set L = d.E
from B c join (select a.c,a.d,a.l,a.m,a,n,b.E from B a join A b on a.C=b.C
AND a.D=b.D
AND b.F<a.M
AND b.G>a.N
)) d on c.d=d.d and c.c=d.c and c.l=d.l and c.n=d.n and c.m=d.m

这个才对
love灵灵 2012-08-07
  • 打赏
  • 举报
回复
update b set l=a.e from a,b where a.c=b.c and a.d=b.d and a.f<b.m and a.g>b.n
lene3 2012-08-07
  • 打赏
  • 举报
回复
上边那个写错了,应该是这个:

update B
set L = d.E
from B c join (select a.c,a.d,a.l,a.m,a,n,b.E from B a join A b on a.C=b.C
AND a.D=b.D
AND a.F<b.M
AND a.G>b.N
)) d on c.d=d.d and c.c=d.c and c.l=d.l and c.n=d.n and c.m=d.m
lene3 2012-08-07
  • 打赏
  • 举报
回复
是不是可以这样写快点

update B
set L = b.E
from B c join (select a.c,a.d,a.l,a.m,a,n from B a where exeists(select 1 from A where A.C=b.C
AND A.D=b.D
AND A.F<b.M
AND A.G>b.N
)) d on c.d=d.d and c.c=d.c and c.l=d.l and c.n=d.n and c.m=d.m

如果某一列的值是唯一的话,可以只选一个相等
n27741 2012-08-07
  • 打赏
  • 举报
回复


--避免其他业务影响 增加HOLDLOCK 但其他访问会被阻塞
--将A B 表中的 C D字段作为索引 会加快update定位速度 节省一点时间

update B set B.L = A.E from A with(HOLDLOCK) ,B with(HOLDLOCK) where A.C=B.C AND A.D = B.D AND A.F < B.M AND A.G > B.N

cxmcxm 2012-08-06
  • 打赏
  • 举报
回复

update b set l=a.e
from a,b where a.c=b.c and a.d=b.d and a.f<b.m and a.g>b.n
shoppo0505 2012-08-06
  • 打赏
  • 举报
回复
在我看来,这个应该是最简单的方法了。执行之间长也只能耐心等待。

不然你再等等,看看后面的大拿有啥好办法。
czx33859066 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
update B
set L = A.E
from A
where A.C=B.C
AND A.D=B.D
AND A.F<B.M
AND A.G>B.N
[/Quote]
数据量大的话,怎么解决啊?
A表有1000W,B表有30W
shoppo0505 2012-08-06
  • 打赏
  • 举报
回复
update B
set L = A.E
from A
where A.C=B.C
AND A.D=B.D
AND A.F<B.M
AND A.G>B.N

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧