UPDATE com inner join e group by. Ajuda?

MySQL

CRUD

Banco de Dados

NetBeans

31/01/2019

A função Group by não está correspondendo. Onde posso executar ela?

ERRO CODE 1064

CREATE EVENT incrementar_prof1 ON SCHEDULE EVERY 1 minute DO
UPDATE tbxerox
inner join tbservidores on tbxerox.cpf = tbservidores.cpfserv
SET maxcot = (tbxerox.restcota + 80),
qtd_xerox = (0)
WHERE x.cpf = s.cpfserv
and (tbxerox.restcota) > 0
and tbservidores.tiposerv = 'Professor'
and xerox = ultimo_Xerox ()
GROUP BY x.cpf;
Igor

Igor

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

31/01/2019

Não conheço MySQL, mas normalmente a sintaxe do comando UPDATE...FROM é como segue:
UPDATE tbx SET tbx.maxcot = (tbx.restcota + 80), tbx.qtd_xerox = 0
FROM tbxerox tbx
INNER JOIN tbservidores tbs on tbs.cpfserv = tbx.cpf
WHERE tbx.cpf = tbs.cpfserv
and (tbx.restcota) > 0
and tbs.tiposerv = 'Professor'
and tbx.xerox = ultimo_Xerox()
GROUP BY tbx.cpf

GOSTEI 0
Luiz Vichiatto

Luiz Vichiatto

31/01/2019

Olá Igor
Porque você está utilizando 'FROM' quando o comando 'UPDATE' é direto na tabela chamada?

Acredito que seria melhor fazer uma sub-query para a identificação da linha, ou linhas, da tabela que deseja alterar utilizando a clausula 'WHERE' para isto.

UPDATE tbxerox SET tbxerox.maxcot = (tbxerox.restcota + 80), tbxerox.qtd_xerox = 0
where tbxerox.cpf in (	select tbx1.cpf from tbxerox tbx1
							INNER JOIN tbservidores tbs on tbs.cpfserv = tbx1.cpf
						WHERE tbx1.cpf = tbs.cpfserv
							and (tbx1.restcota) > 0
							and tbs.tiposerv = 'Professor'
							and tbx1.xerox = ultimo_Xerox()
						GROUP BY tbx1.cpf
					)



GOSTEI 0
Igor

Igor

31/01/2019

Olá Igor
Porque você está utilizando 'FROM' quando o comando 'UPDATE' é direto na tabela chamada?

Acredito que seria melhor fazer uma sub-query para a identificação da linha, ou linhas, da tabela que deseja alterar utilizando a clausula 'WHERE' para isto.

UPDATE tbxerox SET tbxerox.maxcot = (tbxerox.restcota + 80), tbxerox.qtd_xerox = 0
where tbxerox.cpf in (	select tbx1.cpf from tbxerox tbx1
							INNER JOIN tbservidores tbs on tbs.cpfserv = tbx1.cpf
						WHERE tbx1.cpf = tbs.cpfserv
							and (tbx1.restcota) > 0
							and tbs.tiposerv = 'Professor'
							and tbx1.xerox = ultimo_Xerox()
						GROUP BY tbx1.cpf
					)





FIZ ASSIM:

UPDATE tbxerox x
INNER JOIN tbservidores s on s.cpfserv = x.cpf
SET s.maxcot = (x.restcota + 80), x.qtd_xerox = 0
where s.cpfserv in (select * from (select x.cpf from tbxerox x
GROUP BY x.cpf
order by x.cpf desc)QRYALIAS )


and (x.restcota) > 0
and s.tiposerv = 'Professor';

NÃO APRESENTOU ERROS, MAS ELE ATUALIZA TODOS OS REGISTROS.

Tenho uma tabela com vários pedidos de N clientes e preciso pegar qual foi o último pedido desse cliente , carregando o numero do pedido e o código desse cliente e atualizar.

TESTEI O SELECT E MOSTROU CORRETAMENTE. SÓ FALTA ATUALIZAR.
GOSTEI 0
POSTAR