Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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
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.
>
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.
Satisfeito em ajudar, até a próxima e abraço.
Bom dia amigo,
Use o EXISTS nesse caso pra cláusula WHERE.
WHERE EXISTS (SELECT ...)
A disposição, abraço.