Meine Lösung mit einem kleinen Trick:Erstens:Sie müssen einen Subselect verwenden, damit UPDATE nicht jetzt dieselbe Tabelle ist. Zweitens:Sie müssen die @id mit "(SELECT @id:=0)" initialisieren, sonst, wenn die gefundene Zeile nicht zurückgegeben wird der zuletzt eingestellte Wert. Hier können Sie auch angeben, ob sie 0 oder '' zurückgeben, wenn kein Ergebnis gefunden wird.
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
);