【问题标题】:UPDATE with HAVING Clause calculated更新计算有 HAVING 子句
【发布时间】:2013-11-15 02:18:10
【问题描述】:

我正在尝试基于使用 HAVING 子句和 MySQL 中计算字段的选择来执行更新语句。我的选择是:

SELECT FLOOR( IF( file_real_id, file_real_id, file_id ) /5000 ) AS fldrid, file_id
FROM Files
WHERE srv_id =2
HAVING fldrid =0

现在我想更新上面用 file_id 标识的所有记录,并将它们的 srv_id 设置为 3。本质上

UPDATE Files SET srv_id = 3 
[for all records identified with their file_id in the above SELECT]

我尝试了Using a HAVING clause in an UPDATE statement 中提出的所有答案,但如果没有 MySQL 错误,我无法让它们中的任何一个工作。

根据下面的评论,这是使用内部连接的尝试。

update f1 set
srv_id=3
from
Files f1 
inner join (
    SELECT file_id,
    FROM Files
    WHERE srv_id =2
    HAVING FLOOR( IF( file_real_id, file_real_id, file_id ) /5000 )=1
    ) f2 on
f1.file_id = f2.file_id;

这是按照之前链接中的建议进行的,但存在语法错误。另一个是:

UPDATE Files SET Srv_id = 3 Where file_id IN (
SELECT file_id,
FROM Files
WHERE srv_id =2
HAVING FLOOR( IF( file_real_id, file_real_id, file_id ) /5000 )=1))

【问题讨论】:

  • 发布你的最佳尝试(即使它没有运行)。

标签: mysql sql sql-update having-clause


【解决方案1】:

试一试

UPDATE files f JOIN
(
  SELECT file_id,
    FROM files
   WHERE srv_id =2
  HAVING FLOOR(IF(file_real_id, file_real_id, file_id) / 5000) = 1
) q ON f.file_id = q.file_id
   SET srv_id = 3;

UPDATE files 
   SET srv_id = 3 
 WHERE file_id IN 
(
  SELECT file_id
    FROM
  (
    SELECT file_id,
      FROM files
     WHERE srv_id =2
    HAVING FLOOR(IF(file_real_id, file_real_id, file_id) / 5000) = 1
  ) q
);

【讨论】:

  • @OldTimerRestarting 有帮助吗?您的问题需要更多帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多