Ir para conteúdo
  • Cadastre-se

dev botao

ajuda com update


Ver Solução Respondido por Dfox,
  • Este tópico foi criado há 1228 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

bom dia a todos,

tenho o seguinte comando sql

update C000050 QRC
set QRC.CODCONTA = (select RC.CODIGO
                    from C000049 RC
                    where substring(RC.CODIGO from 1 for 10) = QRC.CODCONTA and
                          char_length(QRC.CODCONTA) = 10)
where char_length(QRC.CODCONTA) = 10

porem da erro por ter registros repetidos multiple rows in singleton select.

alguém teria uma solução?

Postado (editado)
1 hora atrás, Dfox disse:
select RC.CODIGO
                    from C000049 RC
                    where substring(RC.CODIGO from 1 for 10) = QRC.CODCONTA and
                          char_length(QRC.CODCONTA) = 10

nesse select esta retornando mais de um resultado, vc deve filtrar melhor para que esse select retorne apenas um resultado.

eu usaria:

update C000050 QRC
set QRC.CODCONTA = (select first 1 RC.CODIGO
                    from C000049 RC
                    where substring(RC.CODIGO from 1 for 10) = QRC.CODCONTA and
                          char_length(QRC.CODCONTA) = 10)
where char_length(QRC.CODCONTA) = 10

ai ele traria apenas um resultado, mas cuidado com isso, nada garante que será o registro que vc precisa, então de uma olhada melhor nos filtros

Editado por datilas
  • Solution
Postado

Obriga deu certo mas ficou muito lento então fiz assim com duas formas

opção 1

merge into C000050 QRC
using (select RC.CODIGO
       from C000049 RC) as RC
on substring(RC.CODIGO from 1 for 10) = QRC.CODCONTA and char_length(QRC.CODCONTA) = 10
when matched then
    update set QRC.CODCONTA = RC.CODIGO

opção 2

execute block
as
  declare variable rccodigo varchar(15);
begin
for select RC.CODIGO from C000049 RC, C000050 QRC where substring(RC.CODIGO from 1 for 10) = QRC.CODCONTA and char_length(QRC.CODCONTA) = 10
    into :rccodigo do
    begin
       update C000050 set codconta = :rccodigo where codconta = substring(:rccodigo from 1 for 10);
    end
end;

ficou super rápido.

  • Este tópico foi criado há 1228 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.