Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Update, repetir valores em campos vazios


EAlcantara
 Share

Question

Estou com a seguinte situação, que nunca havia enfrentado antes, já perdi alguns dias tentando descobrir uma forma de repetir os valores nos campos vazios abaixo.

 nome_cor             |   Id_produto|
     rosa                 |   10       |
     verde                |             |
     azul                  |             |
     amarelo verde   |             |
     rosa                  |            |
     verde                |   125    |
     azul                  |            |
     amarelo verde    |            |
     laranja               |            |
     cinza dourado    |   136    |
     amarelo verde    |            |
     rosa                  |   45      |
     verde                |             |
     azul                  |             |
     amarelo verde   |             |
     laranja              |             |
     cinza dourado   |             |


Preciso que fique com o seguinte formato, alguém conhece alguma forma de fazer isso no mysql?

	 nome_cor		 | Id_produto|
	 rosa			 |	 10	   |
	 verde		 |	 10	   |
	 azul			 |	 10	   |
	 amarelo verde	 |	 10	   |
	 rosa			 |	 10	   |
	 verde		 |	 125	   |
	 azul			 |	 125	   |
	 amarelo verde	 |	 125	   |
	 laranja		 |	 125	   |
	 cinza dourado	 |	 136	   |
	 amarelo verde	 |	 136	   |
	 rosa			 |	 45	   |
	 verde		 |	 45	   |
	 azul			 |	 45	   |
	 amarelo verde	 |	 45	   |
	 laranja		 |	 45	   |
	 cinza dourado	 |	 45	   |
Edited by EAlcantara
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Analise o teste abaixo e informe progresso:

-- selecionei meu banco de teste
use test; 

-- criei uma tabela com os dados que vc passou
create table cor(      
nome_cor varchar(50),
Id_produto int
);

-- inseri os valores que vc passou
insert into cor(nome_cor,Id_produto)  
values("rosa",10),("verde",null),("azul",null),("amarelo verde",null),
     ("rosa",null),("verde",125),("azul",null),("amarelo verde",null),
     ("laranja",null),("cinza dourado",136),("amarelo verde",null),
     ("rosa",45),("verde",null),("azul",null),("amarelo verde",null),
     ("laranja",null),("cinza dourado",null)
;

-- criei um select para saber quais produtos estavam cadastrados para que cores
select * from cor where not id_produto is null
; 

-- Criei sql de atualização com base no sql acima
update cor c1
inner join (select * from cor where not id_produto is null) c2 on c2.nome_cor = c1.nome_cor
set c1.id_produto = c2.id_produto
where c1.id_produto is null
;
Link to comment
Share on other sites

  • 0

Boa noite, Denis verifiquei a sua alternativa, mas não é o que eu pretendo. A coluna id produto serve para agrupar produtos iguais, mas com características diferentes, exemplo o produto 10 é calça feminina cintura alta. Todos os campos que estão null abaixo até que tenha um novo valor maior que zero são o mesmo produto, porém com cor e tamanho. Pretendo associar todos esses produtos que se diferenciam apenas por cor e tamanho dentro de um mesmo Identificador.

Consigo facilmente identificar onde cada produto inicia e atribuo um ID, esse ID deve ser replicado para baixo, de forma que eu posso simplesmente ignorar a coluna cor porque consigo saber a sequência correta em que ID_PRODUTO, fazendo o seguinte select

"Select id_produto from cor order by item_id asc;" Sendo que item_id é chave primaria que vai de 1 a n... com auto incremento. Poderíamos inclusive desprezar a coluna cor pois o id não se relaciona diretamente com a cor.

Atualmente esse select me entrega essa coluna	
 
	| Id_produto |
	|	 10	   |
	|	 	   |
	|	 	   |
	|	 	   |
	|	 	   |
	|	 125     |
	|	 	   |
	|	 	   |
	|	 	   |
	|	 136     |
	|	 	   |
	|	 45	   |
	|	 	   |
	|	 	   |
	|	 	   |
	|	 	   |
	|	 	   |

Ao fazer um update espero que ela me entregue isso

	 
	|Id_produto   |
	|	 10	   |
	|	 10	   |
	|	 10	   |
	|	 10	   |
	|	 10	   |
	|	 125     |
	|	 125     |
	|	 125     |  
	|	 125     |
	|	 136     |
	|	 136     |
	|	 45	   |
	|	 45	   |
	|	 45	   |
	|	 45	   |
	|	 45	   |
	|	 45	   |

Hoje tentarei fazer usando WHILE (mas não domino isso no SQL) tentando fazer com que enquanto o campo id_produto for vazio o laço preencha o campo com o conteúdo do campo acima.

Grato pela ajuda, se puder continuar me ajudando a conseguir uma solução serei muito grato.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...