Моето решение с малък трик:първо:трябва да използвате подизбор, така че UPDATE да не е същата таблица след това:трябва да инициализирате @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
);