Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Distinct


Elvis Reis

Pergunta

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

  • 0

A sintaxe correta é

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;

Tente e informe se houve sucesso.

att

Denis Courcy

Obs.: 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.produto

FROM produtos p

Inner Join departamentos d

ON d.fk_produto = p.id_produto

WHERE d.fk_sessao = 34;

Link para o comentário
Compartilhar em outros sites

  • 0

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 devem

ser retornados. O padrão é (ALL), todos os registros coincidentes são retornados. DISTINCT e

DISTINCTROW são sinônimos e espcificam que registros duplicados no conjunto de resultados

devem 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). DISTINCT

and DISTINCTROW are synonyms and specify removal of duplicate rows from the result

set."

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

  • 0

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.

att

Denis Courcy

Link para o comentário
Compartilhar em outros sites

  • 0

Acabei fazendo dessa forma essa seria a melhor forma pra resolver esse problema

SELECT 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

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...