UPDATE com inner join e group by. Ajuda?
31/01/2019
0
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
Posts
01/02/2019
Emerson Nascimento
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
01/02/2019
Luiz Vichiatto
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 )
02/02/2019
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.
Clique aqui para fazer login e interagir na Comunidade :)