Ir para conteúdo

Arquivado

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

Fernando José

[Resolvido] mySQL IF

Recommended Posts

Pessoal,

 

Tenho uma tabela PRODUTO e outra PRODUTO_TAMANHO, elas estão relacionadas, em produto salvo os dados do produto e em produto_tamanho salvo o estoque do produto e tamanho da roupa.

 

Precisa buscar na tabela todos produtos que estejam em promoção (produto.promocao > 0) e que estejam com produto_tamanho.quantidade > 0. Como cada produto pode ter mais de um tamanho eu usei SUM(pt.quantidade).

 

Tentei algo assim:

 

SELECT p.codigo, p.titulo, p.preco, p.promocao
				FROM  produto p 
				WHERE p.promocao > 0
				AND 
					if(SELECT SUM(pt.quantidade)  FROM produto_tamanho pt WHERE pt.produto = p.codigo) > 0

 

Não deu certo, poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo,

 

Use o EXISTS nesse caso pra cláusula WHERE.

 

WHERE EXISTS (SELECT ...)

 

A disposição, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo,

 

Use o EXISTS nesse caso pra cláusula WHERE.

 

WHERE EXISTS (SELECT ...)

 

A disposição, abraço.

 

Bom dia,

 

Tentei algo assim mas não deu certo.

 

SELECT p.codigo, p.titulo, p.preco, p.promocao
				FROM  produto p 
				WHERE p.promocao > 0
				AND  EXISTS(
					SELECT SUM(pt.quantidade)  FROM produto_tamanho pt WHERE pt.produto = p.codigo
				)

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, deu algum erro?

 

Pelo que notei você esqueceu de especificar que SUM(pt.quantidade) deve ser > 0. Eu acho que devia ficar assim:

 

SELECT p.codigo, p.titulo, p.preco, p.promocao
FROM  produto p 
WHERE p.promocao > 0
AND EXISTS (
   SELECT SUM(pt.quantidade) FROM produto_tamanho pt WHERE pt.produto = p.codigo AND SUM(pt.quantidade) > 0
)

Acho que é isso. Ou pode ser mais simples, você pode fazer no EXISTS assim: SELECT 1 FROM produto_tamanho pt WHERE pt.produto = p.codigo AND pt.quantidade > 0, pois assim você diz que se existir um SELECT naquela tabela onde tenha um pt.quantidade > 0, o que equivale ao SUM, pois se houver pelo menos 1 pt.quantidade > 0, o SUM também será (na teoria deve ser assim).

 

A disposição, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, deu algum erro?

 

Pelo que notei você esqueceu de especificar que SUM(pt.quantidade) deve ser > 0. Eu acho que devia ficar assim:

 

SELECT p.codigo, p.titulo, p.preco, p.promocao
FROM  produto p 
WHERE p.promocao > 0
AND EXISTS (
   SELECT SUM(pt.quantidade) FROM produto_tamanho pt WHERE pt.produto = p.codigo AND SUM(pt.quantidade) > 0
)

Acho que é isso. Ou pode ser mais simples, você pode fazer no EXISTS assim: SELECT 1 FROM produto_tamanho pt WHERE pt.produto = p.codigo AND pt.quantidade > 0, pois assim você diz que se existir um SELECT naquela tabela onde tenha um pt.quantidade > 0, o que equivale ao SUM, pois se houver pelo menos 1 pt.quantidade > 0, o SUM também será (na teoria deve ser assim).

 

A disposição, abraço.

 

Olá,

 

No primeiro SQL retornou: Invalid use of group function.

 

O segundo SQL resolveu o meu problema. Ficou assim:

SELECT p.codigo, p.titulo, p.preco, p.promocao
				FROM  produto p 
				WHERE p.promocao > 0
				AND EXISTS (
					SELECT 1 FROM produto_tamanho pt WHERE pt.produto = p.codigo AND pt.quantidade > 0
				)

 

Muito obrigado, abraç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.