SqlServerCE 对UPDATE语句的限制(不支持FROM)怎么解

syeerzy 2014-06-19 12:02:26
UPDATE 语句不支持 FROM (文档里写的)还不支持子查询(没说不支持,但是用Sqlserver的语法写的子查询都报错,也许是语法不一样), 我要根据子表去更新父表怎么做?

比如
UPDATE A
SET A1 = Max(B.B1)
FROM A INNER JOIN B
ON A.A2 = B.B2

提示不支持FROM子句

改成子查询方式
UPDATE A
SET A1 = (SELECT Max(B1) FROM B WHERE B.B2=A.A2)
也不行

甚至直接用查询到一个常量的语句都不行..


我需要根据子表查询结果更新父表的数据应该怎么做呢?

翻了stackoverflow 上的帖子, 有一种不是办法的办法是查询A所有记录, 然后遍历,对每条记录执行一个查询去B取到值,赋值给变量,再用这个变量更新A, 也就是我A有1万条记录的话总共需要执行两万零1条sql语句.....这太扯了吧?
...全文
287 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
syeerzy 2014-06-26
  • 打赏
  • 举报
回复
我用了个不是办法的办法解决了, 每次需要执行这个update的时候 清空整个表, 再做个insert ..select 来达到update的效果, 可惜居然不支持 truncate , 所以就变成每次都要delete全部再insert全部来update
wangnaisheng 2014-06-19
  • 打赏
  • 举报
回复
修改一下,这样可以不

UPDATE A
SET A1 = (
SELECT Max(B1) FROM A,B WHERE B.B2=A.A2
)
wangnaisheng 2014-06-19
  • 打赏
  • 举报
回复
引用 4 楼 ap0405140 的回复:
try this,

UPDATE a
 SET a.A1=(SELECT Max(B1) FROM B WHERE B.B2=a.A2)
 from A a
这个可以,我试了
唐诗三百首 2014-06-19
  • 打赏
  • 举报
回复
或者这样写,

update a
 set a.A1=b.maxb1
 from A a
 left join
 (select B2,max(B1) 'maxb1' 
  from B 
  group by B2) b on a.A2=b.B2
唐诗三百首 2014-06-19
  • 打赏
  • 举报
回复
try this,

UPDATE a
 SET a.A1=(SELECT Max(B1) FROM B WHERE B.B2=a.A2)
 from A a
以学习为目的 2014-06-19
  • 打赏
  • 举报
回复
UPDATE A
SET A1 = a.B1
FROM  B a
where  A2 = a.B2  and   not exists (select  b.B1  from  B  b where  b.B1>a.B1)
syeerzy 2014-06-19
  • 打赏
  • 举报
回复
引用 1 楼 wangnaisheng 的回复:
修改一下,这样可以不

UPDATE A
SET A1 = (
SELECT Max(B1) FROM A,B WHERE B.B2=A.A2
)
提示 无法更新列 A1 , 而且在查询设计器里这么写格式化以后会被自动修改为 UPDATE A SET A1 = ( SELECT Max(B1) FROM A INNER JOIN B ON B.B2=A.A2 )

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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