Update Comparando campos na mesma tabela

SQL

Firebird

03/12/2018

Boa tarde amigos.
Tenho uma tabela que tem 2 campos com nome e 2 campos com data.
Vamos chamar de Nome1, Nome2, Data1, Data2. Preciso fazer com que o campo data1 receba o data2 quando nome1=nome2. Um update tabela set data1=data2 where nome1=nome2 atualiza os 8 primeiros registros.
Se eu der um select simples, no estilo SELECT COUNT(*) from nometabela where nome1=nome2, vou receber 8 registros, isso porque até a 8a linha, as duas colunas estão alinhadas. A partir da linha 9, os dados são diferentes. Alguém teria alguma dica de como eu poderia atualizar os dados de uma forma não linear?

Obrigado!
Diego

Diego

Curtidas 1

Respostas

Leonardo

Leonardo

03/12/2018

mas você falou que quer mudar os dados onde NOME1 for igual à NOME2 não é?

Nas 8 primeiras linhas ele está alterando os 8 primeiros registros porquê NOME1 é igual a NOME2 , já na nona linha ele não altera porquê NOME1 não é igual a NOME2

O WHERE não liga para se a linha tá na primeira ou na nona, ele apenas se importa que a coluna esteja NOME1 = NOME2

Caso queira receber receber todos os registros mesmo se NOME1 não for igual a NOME2 basta fazer select sem o campo where
GOSTEI 0
Diego

Diego

03/12/2018

mas você falou que quer mudar os dados onde NOME1 for igual à NOME2 não é?

Nas 8 primeiras linhas ele está alterando os 8 primeiros registros porquê NOME1 é igual a NOME2 , já na nona linha ele não altera porquê NOME1 não é igual a NOME2

O WHERE não liga para se a linha tá na primeira ou na nona, ele apenas se importa que a coluna esteja NOME1 = NOME2

Caso queira receber receber todos os registros mesmo se NOME1 não for igual a NOME2 basta fazer select sem o campo where


Olá Leonardo, tudo bem?
Sim, o where lê e compara as duas colunas naquela linha.
O que preciso fazer é: Exemplo
Nome1 Data1 Nome2 Data2
Joao 13/11/2018 Joao 27/11/2018.
Esse exemplo funciona OK, data 2 vai para data1 porque nome2=nome1
Porém:
Nome1 Data1 Nome2 Data2
Joao 13/11/2018 Carlos 27/11/2018
Marcos 14/11/2018 Joao 15/11/2018

Preciso que a data2 do Joao (2a linha) substitua a data1 do Joao (1a linha)
Entende? A comparação não é linear.
GOSTEI 0
Alex Lekao

Alex Lekao

03/12/2018

Ola Diego, boa tarde!!!

Não sei se entendi bem.

Mas vc ja tentou fazer isso com um select no where?

Imagino que vc tera que utilizar a mesma tabela como se fossem duas tabelas diferentes, fazendo as comparações entre os campos.

Atenciosamente,
GOSTEI 0
Diego

Diego

03/12/2018

Ola Diego, boa tarde!!!

Não sei se entendi bem.

Mas vc ja tentou fazer isso com um select no where?

Imagino que vc tera que utilizar a mesma tabela como se fossem duas tabelas diferentes, fazendo as comparações entre os campos.

Atenciosamente,


Olá Alex, obrigado pela resposta.
Da forma que tentei caí nos mesmos oito registros:
update TABELA SET data1=data2 where NOME1 in (select NOME1 from TABELA where NOME1=NOME2)
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

03/12/2018

veja se assim resolve:
update TABELA t set t.data1 = (select max(t2.data2) from TABELA t2 where t2.nome2=t.nome1)
GOSTEI 0
POSTAR