Elvis Reis Postado Outubro 11, 2007 Denunciar Share Postado Outubro 11, 2007 Galera não consigo fazer com que fique distinto o resultato sobre o campo departamentos.fk_sessaosempre me retorna mas de um registrose eu tirar alguns campos do select funciona porque issoSELECT DISTINCT departamentos.fk_produto FROM (produtos Inner Join departamentos ON departamentos.fk_produto = produtos.id_produto) WHERE departamentos.fk_sessao = 34mas assim não funcionaSELECT DISTINCT departamentos.fk_sessao, produtos.id_produto, departamentos.fk_categoria, departamentos.fk_subcategoria, produtos.produtoFROM (produtos Inner Join departamentos ON departamentos.fk_produto = produtos.id_produto) WHERE departamentos.fk_sessao = 34O link do banco http://www.superpoints.com.br/banco.rar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Outubro 11, 2007 Denunciar Share Postado Outubro 11, 2007 A sintaxe correta é SELECT DISTINCT departamentos.fk_sessao, produtos.id_produto, departamentos.fk_categoria, departamentos.fk_subcategoria, produtos.produtoFROM produtos Inner Join departamentos ON departamentos.fk_produto = produtos.id_produtoWHERE departamentos.fk_sessao = 34;Tente e informe se houve sucesso.attDenis CourcyObs.: Para agilizar sua digitação sem prejudicar o entendimento do código, utilize alias para a tabela. Por exemplo:SELECT DISTINCT d.fk_sessao, p.id_produto, d.fk_categoria, d.fk_subcategoria, p.produtoFROM produtos p Inner Join departamentos d ON d.fk_produto = p.id_produtoWHERE d.fk_sessao = 34; Link para o comentário Compartilhar em outros sites More sharing options...
0 Elvis Reis Postado Outubro 11, 2007 Autor Denunciar Share Postado Outubro 11, 2007 Amigo não deu certo ainda ta com registro repetidosele ta comparando todos os campos como faço pra comparar apenas um pra ver se é distinto ou não.... mas tem que me retornar todos os campos... Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Outubro 11, 2007 Denunciar Share Postado Outubro 11, 2007 Segundo o Manual do MySQL (refman-4.1-pt.a4.pdf) Capítulo 6 item 6.4, ou a versão capítulo 13 item 13.2.7. "As opções DISTINCT, DISTINCTROW e ALL especificam quando registros duplicados devemser retornados. O padrão é (ALL), todos os registros coincidentes são retornados. DISTINCT eDISTINCTROW são sinônimos e espcificam que registros duplicados no conjunto de resultadosdevem ser remopvidos.""The ALL, DISTINCT, and DISTINCTROW options specify whether duplicate rows should be returned.If none of these options are given, the default is ALL (all matching rows are returned). DISTINCTand DISTINCTROW are synonyms and specify removal of duplicate rows from the resultset."Sendo assim, como resultado de sua query, qualquer atributo(campo) diferente em seu registro em comparação com o mesmo atributo em registro anterior, aparecerá como uma nova linha de resultado.Att Denis Courcy Link para o comentário Compartilhar em outros sites More sharing options...
0 Elvis Reis Postado Outubro 11, 2007 Autor Denunciar Share Postado Outubro 11, 2007 Eu já havia lido mas não consegui não achei a sintaxe correta pra usar o comandovocê poderia me mostar como... Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Outubro 11, 2007 Denunciar Share Postado Outubro 11, 2007 A sintaxe corretas é aquela que te enviei antes. Porém o problema não é aquele. Observe o resultado que você enviou. Nele o atributo fk_categoria retorna um valor diferente na primeira e segunda linha. Respectivamente 165 e 166 para a 1a. e 2a. linha. com isso os registro são diferente. Veja o original em ingles "removal of duplicate rows from the result set" (Tradução: remove todas as linhas duplicadas do resultado). No seu caso, porque o atributo fk_categoria difere na primeira e segunda linha, as linhas (registros) não são coincidentes e serão retornadas tal como no exemplo enviado.Use distinct row somente com atributos que não se repetem (atributos essenciais para o retorno da informação) ou use a cláusula GROUP BY para agrupar (contando ou somando) os atributos.attDenis Courcy Link para o comentário Compartilhar em outros sites More sharing options...
0 Elvis Reis Postado Outubro 15, 2007 Autor Denunciar Share Postado Outubro 15, 2007 Acabei fazendo dessa forma essa seria a melhor forma pra resolver esse problemaSELECT produtos.id_produto, departamentos.fk_sessao, departamentos.fk_categoria, departamentos.fk_subcategoria, produtos.produto, produtos.valor_venda, produtos.promocao_inicio, produtos.promocao_final, produtos.promocao_valor FROM (produtos Inner Join departamentos ON departamentos.fk_produto = produtos.id_produto ) WHERE departamentos.fk_sessao = 34 GROUP BY produtos.id_produto Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Elvis Reis
Galera não consigo fazer com que fique distinto o resultato sobre o campo departamentos.fk_sessao
sempre me retorna mas de um registro
se eu tirar alguns campos do select funciona porque isso
SELECT DISTINCT departamentos.fk_produto
FROM (produtos
Inner Join departamentos
ON departamentos.fk_produto = produtos.id_produto
)
WHERE departamentos.fk_sessao = 34
mas assim não funciona
SELECT DISTINCT departamentos.fk_sessao, produtos.id_produto, departamentos.fk_categoria, departamentos.fk_subcategoria, produtos.produto
FROM (produtos
Inner Join departamentos
ON departamentos.fk_produto = produtos.id_produto
)
WHERE departamentos.fk_sessao = 34
O link do banco
http://www.superpoints.com.br/banco.rar
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados