我正在尝试基于在MySQL中使用HAVING子句和计算字段的选择来执行更新语句。我的选择是:
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))
答案 0 :(得分:4)
尝试
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
);