Update Comparando campos na mesma tabela
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!
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
Curtidas 1
Respostas
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
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
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
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
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,
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
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,
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
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