Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro: Update com select


MuRd0C

Pergunta

Seguinte pessoal, estou tentando fazer uma query (UPDATE) para debitar creditos em XX (valor) de uma empresa identificada por script_id + cnpj (da certidão).

Ou seja, o valor virá dinamicamente e a identificação da empresa também.

Quando executo aparece o seguinte erro:

[Err] 1093 - You can't specify target table 'empresa' for update in FROM clause

Já pesquisei, tentei otimizar esse código, mas não vi outra forma de realizar essa consulta.

update empresa
set saldo = saldo - (
		select preço
		from preco_servico
		where id = (select emp2.idEscritorio from empresa as emp2 where razao_social = (select emp3.associacao from empresa as emp3 where idEscritorio = (
                select certidao_contratada.empresa_idEscritorio as idEscritorio
		from certidao_contratada
		inner join certidao_processada on certidao_contratada.cnpj_idCnpj = certidao_processada.certidao_contratada_cnpj_idCnpj
		where certidao_processada.certidao_contratada_scripts_idScript = 68 #script_id
		and certidao_processada.certidao_contratada_cnpj_idCnpj = '34.997.015/0001-98' #cnpj (da certidão)
		order by certidao_processada.dataHoraConcluido desc
		limit 1)))
		and tipo_servico like 'b%'
)
where idEscritorio = (
		select certidao_contratada.empresa_idEscritorio as idEscritorio
		from certidao_contratada
		inner join certidao_processada on certidao_contratada.cnpj_idCnpj = certidao_processada.certidao_contratada_cnpj_idCnpj
		where certidao_processada.certidao_contratada_scripts_idScript = 68 #script_id
		and certidao_processada.certidao_contratada_cnpj_idCnpj = '34.997.015/0001-98' #cnpj (da certidão)
		order by certidao_processada.dataHoraConcluido desc
		limit 1
	);

Grato pela ajuda!

Editado por MuRd0C
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

execute esta parte do código e verifique se ele retorna o id que você quer

	select emp2.idEscritorio from empresa as emp2 where razao_social = (select emp3.associacao from empresa as emp3 where idEscritorio = (
	select certidao_contratada.empresa_idEscritorio as idEscritorio
	        from certidao_contratada
	        inner join certidao_processada on certidao_contratada.cnpj_idCnpj = certidao_processada.certidao_contratada_cnpj_idCnpj
	        where certidao_processada.certidao_contratada_scripts_idScript = 68 #script_id
	        and certidao_processada.certidao_contratada_cnpj_idCnpj = '34.997.015/0001-98' #cnpj (da certidão)
	        order by certidao_processada.dataHoraConcluido desc
	        limit 1))

Link para o comentário
Compartilhar em outros sites

  • 0

execute esta parte do código e verifique se ele retorna o id que você quer

	select emp2.idEscritorio from empresa as emp2 where razao_social = (select emp3.associacao from empresa as emp3 where idEscritorio = (
	select certidao_contratada.empresa_idEscritorio as idEscritorio
	        from certidao_contratada
	        inner join certidao_processada on certidao_contratada.cnpj_idCnpj = certidao_processada.certidao_contratada_cnpj_idCnpj
	        where certidao_processada.certidao_contratada_scripts_idScript = 68 #script_id
	        and certidao_processada.certidao_contratada_cnpj_idCnpj = '34.997.015/0001-98' #cnpj (da certidão)
	        order by certidao_processada.dataHoraConcluido desc
	        limit 1))

Retorna sim! Pesquisei em outros lugares e terei de usar tabelas temporárias. Mas não sei ainda como fazer isso!

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvido, utilizei tabelas temporárias! Vou colocar o código caso alguém tenha a mesma dúvida:

insert into tempEmpresa
select preço
		from preco_servico
		where id = (select idEscritorio from empresa where razao_social = (select associacao from empresa where idEscritorio = (
                select certidao_contratada.empresa_idEscritorio as idEscritorio
		from certidao_contratada
		inner join certidao_processada on certidao_contratada.cnpj_idCnpj = certidao_processada.certidao_contratada_cnpj_idCnpj
		where certidao_processada.certidao_contratada_scripts_idScript = 68 #script_id
		and certidao_processada.certidao_contratada_cnpj_idCnpj = '34.997.015/0001-98' #cnpj (da certidão)
		order by certidao_processada.dataHoraConcluido desc
		limit 1)))
		and tipo_servico like 'b%';
update empresa
set saldo = saldo - (select saldo from tempEmpresa)
where idEscritorio = (
		select certidao_contratada.empresa_idEscritorio AS idEscritorio
		from certidao_contratada
		inner join certidao_processada on certidao_contratada.cnpj_idCnpj = certidao_processada.certidao_contratada_cnpj_idCnpj
		where certidao_processada.certidao_contratada_scripts_idScript = 68 #script_id
		and certidao_processada.certidao_contratada_cnpj_idCnpj = '34.997.015/0001-98' #cnpj (da certidão)
		order by certidao_processada.dataHoraConcluido desc
		limit 1
	);
drop table tempEmpresa;
Editado por MuRd0C
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...