select t1.id t1_id,t2.id t2_id,t1.file_id t1_file_id,t2.file_id t2_file_id,t2.file_name file_name from (select * from attachments where file_id=0) t1 leftjoin (select * from attachments whereidin ( selectmax(id) max_id from attachments where file_id!=0and contract_id in (select contract_id from attachments where file_id=0) groupby contract_id )) t2 on t1.contract_id =t2.contract_id ;
1 2 3 4
selectconcat('update attachments set file_id=',t2_file_id,'where id=',t1_id,';') from (select t1.id t1_id,t2.id t2_id,t1.file_id t1_file_id,t2.file_id t2_file_id,t2.file_name file_name from (select * from attachments where file_id=0) t1 leftjoin (select * from attachments whereidin ( selectmax(id) max_id from attachments where file_id!=0and contract_id in (select contract_id from attachments where file_id=0) groupby personnel_contract_id )) t2 on t1.contract_id =t2.contract_id ) as t3;