Eu aprendi isso uns anos atrás quando trabalhava migrando dados do banco dos concorrentes pro da empresa onde eu trabalhava e me salvou de ter que dar infinitos ctrl v
Basicamente você faz uma query pegando os valores que precisa de uma tabela e manda a view resultante mostrar eles concatenados dentro de uma string que inclui o comando de uma query que você vai usar pra inserir/atualizar/deletar os dados depois
Por exemplo, você tem uma tabela com milhares de produtos e suas respectivas categorias, e quer popular uma segunda tabela chamada categorias com a lista de categorias, rodando:
select concat ('insert into categorias(descricao) values (', categoria, ');') from produtos group by categoria
Você recebe como resultado uma série de comandos:
insert into categorias(descricao) values (fruta);
insert into categorias(descricao) values (verdura);
insert into categorias(descricao) values (legume);
etc
Aí é só rodar a lista inteira de uma vez e a nova tabela categorias é populada com todos os valores da coluna da tabela produtos, só que sem duplicados.
Ou num exemplo onde a própria tabela de onde os dados coletados é atualizada, podemos pegar uma lista com todos os códigos internos e todos os códigos de barras e usando o concat inserimos os dois numa query que manda inverter eles, gerando uma lista de queries com uma quantidade igual à quantidade de itens trazida pelo select:
select concat("update produto set identificacao_interna='",codigo_barra,"', codigo_barra='", identificacao_interna,"' where codigo_barra='", codigo_barra,"' and id_cadastro=123;") from produto
Isso gera uma longa lista de linhas parecidas com a abaixo, mudando só os códigos a cada linha:
update produto set identificacao_interna= '111111111' , codigo_barra= '22222222' where codigo_barra='111111111' and id_cadastro=123;
Aí é só pegar a lista inteira e rodar de uma vez, atualizando ambos os valores em todas as as linhas.
No comments:
Post a Comment