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]
「 UPDATE ステートメントで HAVING 句を使用する」で提案されているすべての回答を試しましたが、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))