Problema com a Função MIN(valor)

Galera eu to com um problema que parece ser simples mas devo estar errando em alguma sintaxe.

Seguinte, eu tenho a seguinte sql

SELECT MIN(s.valor) as valor,p.*, sm.nome FROM supermercado_produto s, produto p, super_mercado sm WHERE (sm.idsuper_mercado = s.idsuper_mercado AND s.idsuper_mercado = 1 AND s.idproduto = p.idproduto AND s.valor > 0) or (sm.idsuper_mercado = s.idsuper_mercado AND s.idsuper_mercado = 2 AND s.idproduto = p.idproduto AND s.valor > 0) GROUP BY s.idproduto ORDER BY idcategoria,idproduto;

ta me retornando só um valor errado, que é o sm.nome
ele não ta trazendo o nome do supermercado mais barato, ta trazendo sempre o nome do supermercado "1"
o valor ta vindo o mais barato que é do mercado 2, mas mostra como se fosse do mercado 1…

Qual SGBD você usa?

E se puder, coloca o script de criação das tabelas também.

Uso Mysql,

tabela super_mercado sm TEM o nome do supermercado e o idsupermercado
tabela supermercado_produto s TEM o Idproduto,Idsupermercado e o VALOR pra esse produto nesse supermercado NxN
tabela produto p TEM idproduto e outras informaçoes do produto

Quando tens group by, todas as colunas têm de ser funções de group (min, max, count,…) ou estar no próprio group by.

SELECT MIN(s.valor) as valor, sm.nome // não podes ter p.* ou TODAS as colunas de p teriam de estar no GROUP BY FROM supermercado_produto s, produto p, super_mercado sm WHERE (sm.idsuper_mercado = s.idsuper_mercado AND s.idsuper_mercado = 1 AND s.idproduto = p.idproduto AND s.valor > 0) or (sm.idsuper_mercado = s.idsuper_mercado AND s.idsuper_mercado = 2 AND s.idproduto = p.idproduto AND s.valor > 0) GROUP BY s.idproduto ORDER BY idcategoria,idproduto;

[quote=pmlm]Quando tens group by, todas as colunas têm de ser funções de group (min, max, count,…) ou estar no próprio group by.

SELECT MIN(s.valor) as valor, sm.nome // não podes ter p.* ou TODAS as colunas de p teriam de estar no GROUP BY FROM supermercado_produto s, produto p, super_mercado sm WHERE (sm.idsuper_mercado = s.idsuper_mercado AND s.idsuper_mercado = 1 AND s.idproduto = p.idproduto AND s.valor > 0) or (sm.idsuper_mercado = s.idsuper_mercado AND s.idsuper_mercado = 2 AND s.idproduto = p.idproduto AND s.valor > 0) GROUP BY s.idproduto ORDER BY idcategoria,idproduto; [/quote]

então como posso fazer uma sql para eu saber os dados completos de todas as tabelas, me informando entre os mercados que tem aquele produto me mostre o menor valor e as características do produto… isso para todos os produtos…

ex: tenho o produto Refrigerante Coca cola que esta na tabela produto
tenho tbm o Arroz Tio João
tenho a Cerveja Skol
e assim por diante…

na tabela super_mercado tenho idsuper_mercado e nome

na tabela supermercado_produto é o relacionamento entre a tabela produto e super_mercado (idsuper_mercado, idproduto, valor), que é onde fica registrado os preços desses produtos pra cada supermercado. sendo que nem todos os produtos estão em todos os supermercados…

então eu preciso fazer uma sql, que me mostre todos os produtos, mas somente mostre onde o produto em questão esta mais barato, com as informaçoes completas das 3 tabelas,
quero que me mostre idsupermercado, nome do supermercado, valor do produto, nome do produto, marca, fabricante etc…

alguem para ajudar?
abraço

É o que o pmlm disse lá em cima, se você precisa de todas as colunas da tabela produto, todas as colunas da tabela produto deverão estar no GROUP BY, e isso vale pra qualquer coluna que não seja uma função de agregação

fiz o que ele falo… e ainda continua igual, tbm coloquei todas as colunas no GROUP BY mas nao deu tbm…

Algo assim?

SELECT p.*, sm.nome, smp.valor FROM produto p, super_mercado sm, supermercado_produto smp WHERE sm.idsuper_mercado = smp.idsuper_mercado AND smp.idproduto = p.idproduto and smp.valor = (SELECT min(valor) FROM supermercado_produto smp2 where smp2.idproduto = p.idproduto)