Select como clausula no where

O SELECT me mostra o valor da coluna restcota do penúltimo registro e dependendo se esse valor for maior que zero, irei atualizar o ultimo registro. Estou usando esse SELECT como clausula.

Este é o SELECT que me mostra o valor da coluna do registro anterior, está executando certinho:

SELECT restcota FROM tbxerox x order by xerox desc limit 1,1;

E este é o UPDATE, mas está emitindo erro :

Error Code: 1093. You can’t specify target table ‘x’ for update in FROM clause


UPDATE tbxerox x
INNER JOIN tbservidores s on s.cpfserv = x.cpf
set x.valor = (s.maxcot - s.total_xerox) * (-0.10)
where 
(SELECT x.restcota 
FROM tbxerox x 
where x.cpf = x.cpf
order by x.xerox desc limit 1,1) > 0 

and (x.restcota) < 0
and (s.maxcot - x.qtd_xerox) < 0
and (x.qtd_xerox) > 0
and (s.total_xerox) > 80
and x.xerox = ultimo_Xerox ()
and s.tiposerv = 'Professor';

Tenta mudar o alias da sua tabela utilizada no sub-select, acredito que ele está se perdendo neste ponto, pois você referencia 2 vezes a mesma tabela utilizando o mesmo alias.

Exemplo:

(SELECT tbx.restcota
FROM tbxerox tbx
where tbx.cpf = x.cpf
order by tbx.xerox desc limit 1,1) > 0
1 curtida

Emitiu o mesmo erro.

Pra testar o retorno da subquery use exists

https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html

no seu caso algo como:

where EXISTS(SELECT x.restcota FROM tbxerox x ...)

Vai treinando ai