ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Executar Update SQL comparando dados da mesma tabela

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
dbergkamps
Novato
Novato


Registrado: Sexta-Feira, 22 de Mai de 2020
Mensagens: 34

MensagemEnviada: Qui Jun 11, 2020 10:12 am    Assunto: Executar Update SQL comparando dados da mesma tabela Responder com Citação

Olá pessoal, bom dia a todos!
Tenho mais uma dúvida, pra variar rsrs...
Estou executando um laço de repetição dentro da minha aplicação para atualizar campos de uma tabela em MySQL. Apesar de funcionar, a execução é meio lenta, pois envolve muitos registros.
Gostaria de saber se existe uma forma de realizar essa atualização via SQL.
Exemplo: Tenho a tabela abaixo.

Eu preencho o campo Cor manualmente. Depois de preencher, eu queria atualizar via SQL, os campos vizinho1 e vizinho, com as cores da próxima linha.
Se alguém puder ajudar, de já agradeço.
Encontrei alguns exemplos, mas não consegui adaptar ainda pro que preciso.
Código:

cod   cor         vizinho1      vizinho2
1   verde         vermelho      branco
2   vermelho      branco         -
3   branco         -         -
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jun 11, 2020 3:06 pm    Assunto: Responder com Citação

Boa tarde,

Não tenho experiência com o MySQL, não sei se é a melhor alternativa, mas segue uma sugestão para testes:

Código:
update Tabela as t
inner join
(
    select
        s.cod,
        (select v1.cor from Tabela as v1
         where v1.cod > s.cod
         order by v1.cod
         limit 1) as vizinho1,
        (select v2.cor from Tabela as v2
         where v2.cod > s.cod
         order by v2.cod
         limit 1 offset 1) as vizinho2
    from Tabela as s
) as j on j.cod = t.cod
set t.Vizinho1 = j.Vizinho1, t.Vizinho2 = j.Vizinho2


Espero que ajude


Editado pela última vez por imex em Qui Set 16, 2021 8:57 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dbergkamps
Novato
Novato


Registrado: Sexta-Feira, 22 de Mai de 2020
Mensagens: 34

MensagemEnviada: Qui Jun 11, 2020 5:06 pm    Assunto: Responder com Citação

Imex cara, q top!
Deu certo. Muito obrigado mesmo!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dbergkamps
Novato
Novato


Registrado: Sexta-Feira, 22 de Mai de 2020
Mensagens: 34

MensagemEnviada: Sex Jun 26, 2020 8:16 pm    Assunto: Responder com Citação

Reabrindo o tópico. O código funcionou perfeito no MySql. No SQLite, ele dá erro:
Citação:

[20:12:30] Error while executing SQL query on database 'bd_catalog': near "inner": syntax error
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dbergkamps
Novato
Novato


Registrado: Sexta-Feira, 22 de Mai de 2020
Mensagens: 34

MensagemEnviada: Sex Jun 26, 2020 10:48 pm    Assunto: RESOLVIDO Executar Update SQL comparando dados da mesma Responder com Citação

Consegui ajustar o código.
segue
Código:

update candles
set candles_mg1 = (select candles_direcao from candles pf
where pf.candles_id > candles.candles_id
order by pf.candles_id limit 1)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB