Ես փորձում եմ կատարել թարմացված հայտարարություն՝ հիմնված ընտրության վրա, որն օգտագործում է 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]
Ես փորձեցի բոլոր պատասխանները, որոնք առաջարկվել էին Օգտագործելով HAVING կետը UPDATE հայտարարության մեջ բայց ես չեմ կարող նրանցից որևէ մեկը աշխատել առանց 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))