高分请教一个基础的update语句

jcxpy910 2016-05-16 05:07:54
如题:id为一个自增的列,语句如下:

UPDATE [dbo].[test]
SET [科室] = '科室'
where id=max(id)
GO

目的是修改id这个字段中最大值那一行中科室这个字段的值。
错误提示:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

那么改为:UPDATE [dbo].[test]
SET [科室] = '科室'
having (id=max(id))
GO
错误提示:关键字 'having' 附近有语法错误。
请问一下各位大神这个update语句应该怎么修改
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Henry Zheng 2016-05-17
  • 打赏
  • 举报
回复
楼主最好先清楚什么时候用HAVING,什么时候用WHERE,HAVING必须使GROUP BY语句后使用,也就是必须有聚集函数的时候,使用WHERE的时候并不是聚集函数。 GROUP BY 将聚集以外的放在一起,其余的条件用HAVING实现。
gw6328 2016-05-17
  • 打赏
  • 举报
回复
安全一点就这样。

declare @id int ;
select @id=max(id) from tb;
update tb set 科室='xxx' where id=@id;
卖水果的net 版主 2016-05-16
  • 打赏
  • 举报
回复

-- 凑个人数

create table test(id int , name varchar(10))
go
insert into test values(1,'XXX'),(3,'YYY'),(2,'ggg')
go
print '--前'
select * from test 
go
with m as (select top 1 * from test order by id desc)
update m set name = '科室'
go
print '--后'
select * from test 
go
drop table test 
go

--前
id          name
----------- ----------
1           XXX
3           YYY
2           ggg

(3 行受影响)


(1 行受影响)
--后
id          name
----------- ----------
1           XXX
3           科室
2           ggg

(3 行受影响)



jcxpy910 2016-05-16
  • 打赏
  • 举报
回复
版主牛B啊,谢谢,嘎嘎
  • 打赏
  • 举报
回复
这个有好几种写法,可以用子查询,也可以用关联查询,上面的是用子查询来写的。
  • 打赏
  • 举报
回复
试试这个:
UPDATE [dbo].[test]
   SET [科室] = '科室'
   where id = (select max(id) from [test])

34,587

社区成员

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

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