Como fazer UPDATE com duas tabelas diferentes.

MySQL

29/05/2014

Bom dia amigos!

com fazer update em duas tabelas diferentes:

1º na tabela1 tenho mais de 27000 registros e precisei acrescentar mais 5 colunas
2º tenho a tabela2 que tem os dados das 5 colunas adicionados na tabela1

A duvida é como fazer o update da tabela1 com os dados da tabela2?

na tabela1 tenho os campos

Tbl1 (tabela que ira recebe o update)

CodProd
Descricao
embalagem
NumNF
Rua (campo novo)
Pos (campo novo)
Alt (campo novo)
Genero(campo novo)
Tpgiro(campo novo)


tbl2 (tabela que tem os dados para atualizar a tabela1)
codPro
Descricao
Embalagem
Peso
Vol
Rua(campo para atualizar a tabela1)
Pos(campo para atualizar a tabela1)
alt(campo para atualizar a tabela1)
TpGiro(campo para atualizar a tabela1)
Genero(campo para atualizar a tabela1)

e possível fazer este procedimento?

Gilberto Santos

Gilberto Santos

Curtidas 0

Melhor post

Marisiana Battistella

Marisiana Battistella

02/06/2014

Mil desculpas!!
Eu te mandei um INSERT mas é de um UPDATE que vc precisa....
Segue o exemplo do Isaac...
GOSTEI 1

Mais Respostas

Marisiana Battistella

Marisiana Battistella

29/05/2014

Bom dia Gilberto!
Tem como fazer isso sim!
Você terá que utilizar a instrução:
INSERT INTO tbl2 ( codPro, Descricao,
                                     Embalagem, 
                                     Peso,
                                     Vol,
                                     Rua(campo para atualizar a tabela1),
                                     Pos(campo para atualizar a tabela1),
                                     alt(campo para atualizar a tabela1),
                                    TpGiro(campo para atualizar a tabela1),
                                    Genero(campo para atualizar a tabela1) )
SELECT CodProd, 
                Descricao,
               embalagem,
               NumNF,
               Rua (campo novo),
               Pos (campo novo),
              Alt (campo novo),
              Genero(campo novo),
               Tpgiro(campo novo) 
FROM Tbl1;


Confira os campos das tabelas....
GOSTEI 0
Gilberto Santos

Gilberto Santos

29/05/2014

Boa noite!
Obrigado pelo retorno, mas não consegue, veja a msg que me retornou.


#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') select `PLU`, `RUA`, `POS`, `AL`, from tbl_dun14' at line 1
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/05/2014

Conferiu a sintaxe e os nomes das colunas?
Eu não testei pois não tenho o MySQL aqui, mas deve funcionar sim...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/05/2014

Veja a explicação: [url]http://dev.mysql.com/doc/refman/5.0/en/insert-select.html[/url]
GOSTEI 0
Gilberto Santos

Gilberto Santos

29/05/2014

Oi Marisiana obrigado pelo retorno, mas não consegui.
GOSTEI 0
Isaac Jose

Isaac Jose

29/05/2014

segue exemplo do Sql

update Tb_01
set VlrContMes_Ant = (Tb_Mes_Anterior.vlrContrDia/20)
from Tb_01
inner join Tb_02 on
Tb_02.campo1 = Tb_01.campo1 and
Tb_02.campo1= Tb_01.campo2

abra primeira uma transação teste o comando e se for o que vc espera confirme o comando se não volte ao estado anterior

att Isaac
GOSTEI 0
Ricardo Araujo

Ricardo Araujo

29/05/2014

O exemplo que a nossa amiga Marisiana esta correto para fazer este exemplo, faça com dois campo e depois vai aumentando.
isac o primeiro select serve para inserir os dados na tabela 2, o segundo serve para selecionar os dados na tabela 1.

INSERT INTO tbl2 ( codPro, Descricao )
SELECT CodProd, Descricao, From Tbl1


Qualque coisa me avise.


Att:
rbbarreto@hotmail.com
GOSTEI 0
Gilberto Santos

Gilberto Santos

29/05/2014

Boa tarde!
Isaac, por favor, poderia me explicar os campos não entendi?
GOSTEI 0
Isaac Jose

Isaac Jose

29/05/2014

Boa tarde!
Isaac, por favor, poderia me explicar os campos não entendi?




update Tb_01 --- tabela que sera afetada
set VlrContMes_Ant --campo a ser afetado é = ao campo da tabela que contem a informação tb_02.vlrContrDia
from Tb_01 -- tabela que sera afetada
inner join -- comando de relacionamento Tb_02 on -- tabela que ira fornecer a informação
Tb_02.campo1 = Tb_01.campo1 and --- campos de relacionamento entre as tabelas
Tb_02.campo1= Tb_01.campo2


não esquecer de utilizar transação para que caso não de certo vc consiga retornar o valor antigo.

Begin -- abre transação
commit -- confirma
rollback -- retorna o banco no modo que estava antes da transação ser aberta.

segue link explicando isso em my sql... não conheço my porem parece ser igual ao sql
https://www.devmedia.com.br/transacoes-no-mysql-artigo-revista-sql-magazine-87/21050

espero que funcione e que eu tenha conseguido explicar direito. estou com sono rsrs
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/05/2014

Gilberto, você conseguir resolver teu "problema" através do exemplo do Isaac?
GOSTEI 0
Gilberto Santos

Gilberto Santos

29/05/2014

Oi, desculpe a demora estava fora nestes últimos dias, vou testar o código do Isaac nesta sexta feira, pois esta semana vai ser curta.
Mas desde já agradeço a todos, se der certo este código vai me ajudar muito.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/05/2014

Sem problemas Gilberto!
Depois nos dê um retorno pra dizer se conseguiu ou não...
GOSTEI 1
Gilberto Santos

Gilberto Santos

29/05/2014

Amigos desculpe dizer mas ainda nada, tentei executar o update da forma que me explicaram e nada... será que tem mais exemplos...
GOSTEI 0
William

William

29/05/2014

Olá Gilberto, o problema de se trabalhar com instruções SQL um pouco mais complexas é a falta de padronização entre os SGBDs, cada um faz de um jeito .. 'uma verdadeira zona !!'

No seu caso essa instrução deve resolver, atualizando todos os registros baseado no valor do campo CodProd:
UPDATE Tbl1 as tb1 INNER JOIN Tbl2 as tb2 on tb1.CodProd = tb2.CodProd
SET tb1.Rua = tb2.Rua, tb1.Pos = tb2.Pos, tb1.Alt = tb2.Alt, tb1.Genero = tb2.Genero, tb1.Tpgiro = tb2.Tpgiro


Mas se fosse por exemplo no SQL Server, o INNER JOIN vem depois da dos SETs ... lamentável!
GOSTEI 1
Gilberto Santos

Gilberto Santos

29/05/2014

Boa tarde!
Wiliiam obrigado pelo retorno vou testar este codigo e te retorno.
GOSTEI 0
Gilberto Santos

Gilberto Santos

29/05/2014

William testei o código e deu certo, mas agora só preciso verificar uma questão de performance, pois são mais de 527000 registros e demora o update. Fiz um teste em 157 linhas na que foi em homologação, agora vou ter que preparar uma trigger para disparar em horário programado.

A todos que me ajudaram muito obrigado, por favor, encerrar este tópico.
GOSTEI 1
William

William

29/05/2014

Finalizando o tópico!
GOSTEI 0
POSTAR