Ir para conteúdo

POWERED BY:

Arquivado

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

Filipe_Moraes

[Resolvido] DISTINCT

Recommended Posts

Olá pessoal, tenho uma tabela com referencias e nessa tabela ha referencias iguais, quero que seja devolvido apenas um registro de cada um, mas ha um problema, preciso de acessar todos os campos da tabela, e com o DISTINCT tenho que especificar o campo com a referencia nesse caso, tipo:

 

sqlCompras = "select * from tb_referencias"

A questão é essa, se preciso de todos os valores de todos os campos, como posso inserir o DISTINCT(referencia) nesse instrução SQL.

Agradecia a ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

lista todos os campos da tabela

select distinct (campo1), campo2 , .... from tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas se pegar todos os campos nao funcionara o distinct, pelo menos nao como entendi que voce quer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa pessoal, obrigado pelo vosso tempo.

É o seguinte, preciso de fazer um response.write de todos os campos no meu asp, mas a duvida não é essa, a questão é que existe um campo chamado "referencia", e ha muitos registros com referencias iguais, então quero fazer um select para mostrar apenas 1 registro desse grupo de referencia, tipo, minha base de dados:

IDregistro | nome | referencia | data
1	teste	 124536	21-07-2008
2	teste2   1236	  21-07-2008
3   teste3   124536	21-07-2008

Quando fizer um select, quero que ele mostre apenas 2 registros, nesse caso o numero 2 E 3 porque o 1 tem a mesma referencia que o 3.

A duvida é, se preciso de todos os campo irei utilizar (*) no lugar dos nomes dos campos na consulta, acontece que se preciso de todos os campos, como posso utilizar o DISTINCT na referencia?

 

Agradecia a ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

não dá para fazer o que você quer, pois o NOME do registro 1 e 3 são diferentes e vão aparecer duas vezes apesar do REFERENCIA ser o mesmo.

você quer que na consulta que aparece TESTE ou TESTE3???

 

o negócio é tu fazer uma gambiarra, um select para a referencia e outro para os demais campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...

pode soar bem estranho, mas já que você quer apenas 1 registro por referência, você pode usar o group by, ex:

sqlCompras = "select * from tb_referencias GROUP BY referencia "

Desta forma se há vários registros para uma mesma referência, só uma será exibida. Agora se há algum critério para exibir determinado registro dentro de um grupo de referência, aí só este group by não vai ajudar.

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá cassitos, como seria esse criterio? esse é o problema.

 

 

NaPraia, fiz uma gambiarra aqui no asp e resultou, mas como ficaria essa gambiarra so no sql?

Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum...

tipo, primeiro tem que saber qual seria o critério... ex: tem que exibir o primeiro registro da referência casa tenham mais de 1 registro para uma mesma referência?

esta query que te passei, ela simplesmente vai retornar só um registro por referência do jeito que está cadastro. agora se precisar incrementar algum tipo de critério, você tem que dizer p/ galera aqui qual seria tal critério.

esta consulta do jeito que passei retornaria:

IDregistro | nome | referencia | data

1 teste 124536 21-07-2008

2 teste2 1236 21-07-2008

talvez a ordem não seja a mesma...

então o critério que me referi é justamente o tipo de 'filtro' que deve ser feito quando uma referência tiver mais de 1 registro.

tem alguma? qual seria (o primeiro ou o último)?

ou basta pegar qualquer um?

 

a gambiarra que você fez no ASP funcionou, o que fez? não precisa postar todo o código (a não ser que queira ehehe), só um resumo das condições feitas, talvez ajude na montagem da query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

IDregistro | nome | referencia | data

você quer tem mais algum campo além desses na tabela?

tem algum id único que seja numérico??

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho q da pra fazer com subquery...

select *
  from tabela a
 where idregistro = (select max(idregistro) from tabela where referencia = a.referencia)

abs,

ska!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, cassitos, no asp eu fiz um select a tabela e selecionei todos os registros, depois fiz um ciclo while e a cada vez que o executava, armazenava a referencia do registro atual num array, assim qd voltava a fazer o while, antes de mostrar o proximo registro, verificava se a referencia existia no array, se sim não mostra o registro.

Com asp é facil, isso ta no papo, rsrs, acontece que se for fazer uma manutenção na base de dados pelo proprio MYSQL não sei como fazer a instrução, poderia apagar qualquer um registro, desde os registros tenham a referencia única.

 

Ska_ska, precio é deletar os repetidos, deixando apenas um qualquer.

 

NaPraia, so tenho esses campos mesmo, o campo IDregistro é único, numerico e autoincrement. É usado com chave primária.

 

Obrigado pelo vosso tempo

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT IDregistro, nome, referencia, data

FROM TABELA A

WHERE (referencia,IDregistro) IN

(SELECT referencia, MAX(IDregistro)

FROM TABELA

GROUP BY referencia)

ORDER BY IDregistro

assim é para funcionar

Compartilhar este post


Link para o post
Compartilhar em outros sites

epa, so mais um problema, se eu precisar alem disso, selecionar os nomes iguais, tipo, fazer essa instrução mas so devolver os registros com o nome "filipe", tipo, tentei assim e deu erro:

SELECT IDcompra,nome,referencia,hora FROM tb_compras WHERE (referencia,IDcompra) IN (SELECT referencia, MAX(IDcompra) FROM tb_compras GROUP BY referencia) nome = 'filipe' ORDER BY IDcompra;

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, ja ta resolvido denovo, coloquei assim:

sqlCompras = "SELECT IDcompra,IDutilizador,comentado,nome,morada,IDproduto,hora,data,estado,quantidad
e,referencia,modo_pagamento,total FROM tb_compras WHERE nome='filipe' and (referencia,IDcompra) IN (SELECT referencia, MAX(IDcompra) FROM tb_compras GROUP BY referencia) ORDER BY IDcompra"

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.