Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

raphaell.info

UPDATE entre tabelas

Recommended Posts

Olá pessoal, estou estudando Mysql e com isto fico criando situações para resolve-las, sendo que neste caso especifico fiquei sem resposta, segue:

 

Tabelas:

CREATE TABLE `teste1` (
 `data` varchar(10) NOT NULL,
 `cod` varchar(1) NOT NULL,
 `txt` varchar(45) NOT NULL,
 PRIMARY KEY (`data`,`cod`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

CREATE TABLE `teste2` (
 `data` date NOT NULL,
 `cod` int(1) unsigned NOT NULL,
 `txt` varchar(45) NOT NULL,
 PRIMARY KEY (`data`,`cod`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

Situação 1:

Teste1 esta alimentada com dados em varchar e necessito leva-los (todos) para teste2 convertendo para seus respectivos tipos de dados, minha complicação esta no campo data.

 

Situação 2:

Ao atualizar a teste2 com dados da teste1, caso já exista as chaves, atualizar somente o conteúdo de txt.

 

Dados de Teste1:

'01/02/2012', '1', '1121111201'
'01/02/2012', '2', '1131111202'
'01/02/2012', '3', '1141111203'
'01/02/2012', '4', '1141111204'

 

Grato,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo,

 

Para o caso 1, conversão de tipos de dados, pesquise sobre o comando CAST.

 

Para o caso 2, o seu UPDATE deverá ter algumas condições usando CASE ou então crie uma PROCEDURE.

 

O CASE sempre salva vidas :D

 

Qualquer coisa estamos a disposição pra ajudar. Abraços.

 

EDIT:

 

Para a situação 1 eu consegui com este comando que eu desconhecia, melhor que o CAST:

 

INSERT INTO teste2 (data, cod, txt) SELECT (date_format(str_to_date(t1.data, '%m/%d/%Y'), '%Y%m%d')), t1.cod, t1.txt FROM teste1 t1

Compartilhar este post


Link para o post
Compartilhar em outros sites

EDIT:

Para a situação 1 eu consegui com este comando que eu desconhecia, melhor que o CAST:

INSERT INTO teste2 (data, cod, txt) SELECT (date_format(str_to_date(t1.data, '%m/%d/%Y'), '%Y%m')), t1.cod, t1.txt FROM teste1 t1

 

Wow, velocidade máxima em solução :clap:

Funcionou perfeitamente, eu estava pesquisando o CAST como você mencionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é eu não conhecia essa função, nunca tinha precisado na verdade. Só o CAST que converte tipos eu conhecia.

 

Enfim :D Pro segundo caso uma PROCEDURE resolve com certeza, veja o caso deste colega:

 

http://forum.imasters.com.br/topic/471913-como-fazer-uma-atualizacao/

 

A PROCEDURE dele foi o mesmo caso que o seu, se existir o resgitro faz uma coisa, senão insere ele.

 

Qualquer coisa fico a disposição =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.