Moje rozwiązanie z małą sztuczką:po pierwsze:musisz użyć podselekcji, aby UPDATE nie było teraz tej samej tabeli:musisz zainicjować @id za pomocą "(SELECT @id:=0)" w przeciwnym razie, jeśli nie znaleziono żadnego wiersza, który zwróci ostatnia ustawiona wartość. Tutaj możesz również określić, czy zwracają 0 lub '', gdy nie zostanie znaleziony wynik.
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
);