ちょっとしたトリックを使った私の解決策:最初:UPDATEが同じテーブルにならないように副選択を使用する必要があります2番目:@idを "(SELECT @id:=0)"で初期化する必要があります。最後に設定した値。ここでは、結果が見つからない場合に0または''を返すかどうかを指定することもできます。
UPDATE jobs SET lease=NOW() WHERE id =
( SELECT * FROM
( SELECT @id:=id FROM jobs,(SELECT @id:=0) AS tmp_id
WHERE TIMESTAMPDIFF(HOUR,lease,NOW())>=8
AND NOT complete ORDER BY priority LIMIT 1
) AS tmp
);