gpt4 book ai didi

MySQL UPDATE IF SELECT 查询

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:33 24 4
gpt4 key购买 nike

我需要构建一个执行以下操作的 mysql 查询:

  • 从 posts 表中选择用户的行数
  • 仅当计数结果小于或等于 5 时才更新 ID = 15 的行的列字段

这是我尝试过的:

UPDATE posts SET post_title = 'my title' IF(SELECT COUNT(ID) FROM posts WHERE (post_status = 'saved' AND user_id = 1) <= 5) WHERE ID = 15

问题:是否可以在单个查询中执行这些类型的操作?

最佳答案

是的,这是可能的。有多种方法可以将子查询合并到 UPDATE 语句中。

一种方法是使用多表更新,并使用内联 View 返回计数:

 UPDATE posts p
JOIN (SELECT COUNT(c.id) AS cnt
FROM posts c
WHERE c.post_status = 'saved'
AND c.user_id = 1
) v
ON v.cnt <= 5
SET p.post_title = 'my title'
WHERE p.id = 15
LIMIT 1

首先运行内联 View 查询(别名为 v)。这将返回一行(因为 COUNT 聚合)。然后我们使用连接操作来匹配 posts 表中的行(别名为 p)。

对于连接谓词,我们从内联 View 中引用返回的“计数”。如果大于 5,则它不会匹配 posts 表中的任何行,因此不会更新任何行。

有几种方法可以获得相同的结果:

UPDATE ( SELECT COUNT(c.id) AS cnt
FROM posts c
WHERE c.post_status = 'saved'
AND c.user_id = 1
HAVING COUNT(c.id) <= 5
) v
JOIN posts p
ON p.id = 15
SET p.post_title = 'my title'
LIMIT 1

或者

UPDATE posts p 
SET p.post_title = 'my title'
WHERE p.id = 15
AND ( SELECT COUNT(c.id) AS cnt
FROM posts c
WHERE c.post_status = 'saved'
AND c.user_id = 1
) <= 5
LIMIT 1

关于MySQL UPDATE IF SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com