首页 » 数据库 » Sql 只更新一条满足条件记录

Sql 只更新一条满足条件记录

作者: 低调的术木 分类: 数据库 发布时间: 2014-05-18 08:25 ė浏览 5,613 次 62条评论

需求:将满足条件记录的”状态”字段置为“1”,但是要求表中只有一条记录”状态”为“1”;

开始的SQL:
UPDATE [T_STOCK_STATE]
SET [STATE] = ‘1’
WHERE [UPDATE_TIME] = (SELECT MIN([UPDATE_TIME]) FROM [T_STOCK_STATE])

原以为这个 [UPDATE_TIME]不会相同,结果操作中却发现[UPDATE_TIME]字段有相同的;

为了保持唯一一个状态为“1”的记录,最先想到的是TOP;
查询的时候经常用 Select Top 1 字段1,字段2,…

改进的SQL:

于是打算在WHERE条件哪里用Select Top 1查出一条记录的主键来(或者其他能唯一标识一条记录的多个字段)

UPDATE [T_STOCK_STATE]
SET
[STOCK_STATE] = ‘1’
WHERE STOCK_CODE =(SELECT TOP 1 STOCK_CODE FROM [T_STOCK_STATE] WHERE [UPDATE_TIME] =(SELECT MIN([UPDATE_TIME]) FROM [T_STOCK_STATE]))

总感觉这个SQL有点不美,查了一些资料。
喻威淇在下面文章里的留言给了更好的答案

http://www.cnblogs.com/wangshijie/archive/2009/05/05/1450161.html#2690990

1楼

其实我们在UPDATE 后面就可以直接用Top
但是要用Top(1),要带括号的,否则会报错;

最终的SQL:
UPDATE TOP(1) [T_STOCK_STATE]
SET
[STATE] = ‘1’
WHERE [UPDATE_TIME] = (SELECT MIN([UPDATE_TIME]) FROM [T_STOCK_STATE])

是不是简洁了许多,感谢“喻威淇”;

 

本文出自 蓝天笔记,转载时请注明出处及相应链接。

本文永久链接: http://ubluesky.com/archives/422

2条评论

  1. 低调的术木 2014 年 6 月 1 日 16:45 回复

    UPDATE Call
    SET CallNumber = ‘1’
    where CallID=(select max(CallID) from Call WHERE Channel = 1)

    最后还是采用这样才实现的,top 有的不支持。
    将就用吧。

  2. 潘宜杰 2017 年 1 月 9 日 10:37 回复

    学习了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部