Ir para o conteúdo
ricardocoimbra

Utilização do select DISTINCT duvida

Mensagens Recomendadas

ricardocoimbra    0
ricardocoimbra

Eu queria que ele do campo utilizador me lista-se apenas uma vez esse usario:

Faço:

select DISTINCT utilizador from utilizadores

mas acontece que eu nessa mesma query queria seleccionar outros campos mas já fora de comparação, eu apenas quero que ele nao inclua o mesmo utilizador....

Pra selecionar todos os campos seria:

select * from utilizadores

Mas e agora pra excluir utilizador repetidos e ao mesmo tempo selecionar o resto dos campos?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Salgado    2
Tiago Salgado

Não percebo o q queres fazer. Dizes que queres apenas uma consulta que retorne os utilizadores mas só pode aparecer uma vez cada utilizador. E nessa mesma listagem queres q apareçam mais dados relativos ao utilizador.

Caso o utilizador esteja repetido, só vai aparecer o que foi escolhido no "DISTINCT" correcto ? é isso que pretendes ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ricardocoimbra    0
ricardocoimbra

SELECT DISTINCT * FROM utilizadores -> ele ve todos os campos com valores iguais e elimina

SELECT DISTINCT utilizador  FROM utilizadores -> ele apenas verifica o do campo utilizador e elimina o repetido

e é isso que eu quero, mas como eu quero passar o resto dos dados pra um array como seleciono dessa tabela o resto id, nome, morada... é que só com o * é que ele me seleciona os campos todos fiz me perceber?

Não percebo o q queres fazer. Dizes que queres apenas uma consulta que retorne os utilizadores mas só pode aparecer uma vez cada utilizador. E nessa mesma listagem queres q apareçam mais dados relativos ao utilizador.

Caso o utilizador esteja repetido, só vai aparecer o que foi escolhido no "DISTINCT" correcto ? é isso que pretendes ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ricardocoimbra    0
ricardocoimbra

Sim como faço?

Não percebo o q queres fazer. Dizes que queres apenas uma consulta que retorne os utilizadores mas só pode aparecer uma vez cada utilizador. E nessa mesma listagem queres q apareçam mais dados relativos ao utilizador.

Caso o utilizador esteja repetido, só vai aparecer o que foi escolhido no "DISTINCT" correcto ? é isso que pretendes ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

deixa-me ver se percebi, tu tens duas linhas com o mesmo utilizador mas com outros atributos repetidos, por exemplo:

utilizador | id

abc | 1

abc | 2

def | 3

def | 4

o que tu querias era que cada utilizador aparecesse apenas uma vez, certo?

abc | ...

def | ...

mas se é isto que tu queres, qual é o valor que devia ficar associado a 'abc' (por exemplo)? 1 ou 2?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ricardocoimbra    0
ricardocoimbra

Sim quero que cada utilizador apareça apenas 1 vez  exacto Rui carlos:

abc

def

Mas como faço pra ir pra o array o resto dos valores da tabela mas referentes a esses utilizadores id, nome , morada?

Porque ao fazer :

SELECT DISTINCT utilizador  FROM utilizadores -> ele depois so me vai dar o valor do "utilizador" e eu queria do resto dos campos (nome, morada, telefone)

deixa-me ver se percebi, tu tens duas linhas com o mesmo utilizador mas com outros atributos repetidos, por exemplo:

utilizador | id

abc | 1

abc | 2

def | 3

def | 4

o que tu querias era que cada utilizador aparecesse apenas uma vez, certo?

abc | ...

def | ...

mas se é isto que tu queres, qual é o valor que devia ficar associado a 'abc' (por exemplo)? 1 ou 2?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

Mas isso é impossível, isto é, se eu percebi bem.

Se queres apenas um utilizador como é que o SGBD vai saber quais são os outros dados dos registos. Imagina, tens 5 registos do mesmo utilizador (Utilizador1), quem tem os id 1, 2, 3, 4 e 5. É impossível dar-te só um resultado porque existem dados diferentes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ricardocoimbra    0
ricardocoimbra

Das duas uma ou eu nao me estou a explicar bem ou não dá mesmo pra fazer!

com SELECT DISTINCT utilizador -> ele "elimina" todos que tiverem o utilizador igual, mas imagina que ele me dá isto

utilizador

1

2

O que eu quero é na tabela ao mesmo tempo selecionar o resto dos "campos" (nome, telefone) desses utilizadores que me foram listados percebes? como é que eu vou pegar os dados nome, telefone? porque na query acima só seleciono o campo utilizador com DISTINCT

utilizador | nome | telefone

1            | joao  |

2            | Ana    |

Quero no fundo é fazer o DISTINCT apenas ao campo "utilizador" e ao mesmo tempo selecionar o campo nome e telefone mas esses já nao fazerem parte do DISTINCT.

Mas isso é impossível, isto é, se eu percebi bem.

Se queres apenas um utilizador como é que o SGBD vai saber quais são os outros dados dos registos. Imagina, tens 5 registos do mesmo utilizador (Utilizador1), quem tem os id 1, 2, 3, 4 e 5. É impossível dar-te só um resultado porque existem dados diferentes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

mas quais dos outros atributos de um mesmo utilizador é que o SGBD vai escolher?

repetindo a questão que coloquei acima:

mas se é isto que tu queres, qual é o valor que devia ficar associado a 'abc' (por exemplo)? 1 ou 2?

parece-me que vai ser uma operação não determinística, razão pelo qual não sei se será possível fazer em SQL.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
SoulOnFire    0
SoulOnFire

SELECT DISTINCT * FROM utilizadores

WHERE utilizador  in ( SELECT DISTINCT utilizador  FROM utilizadores)

N sera isto que queres??

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

isso não vai funcionar... o DISTINCT da primeira linha não vai fazer nada, pois só o atributo utilizador é que aparece repetido. por outro lado, o WHERE também não faz efeito, pois mesmo que já tenha aparecido um utilizador que esteja dentro do SELECT DISTINCT utilizador  FROM utilizadores, como ele não é removido desta lista, quando voltar a aparecer o mesmo utilizador, ele continua a cumprir as condições da clausula WHERE.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
SoulOnFire    0
SoulOnFire

Repara nesta tabela

[table]

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

[/table]

é o resultado de "SELECT NUM_SEQUENCIAL, TIPO_CIRURGIA FROM MX_LISTAS_ESPERA

ORDER BY NUM_SEQUENCIAL"

O resultado de "  SELECT NUM_SEQUENCIAL, TIPO_CIRURGIA FROM MX_LISTAS_ESPERA

  WHERE NUM_SEQUENCIAL in (SELECT DISTINCT NUM_SEQUENCIAL FROM MX_LISTAS_ESPERA)

  ORDER BY NUM_SEQUENCIAL" é este, que é precisamente igual

[table]

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

[/table]

Agora s fizerer "SELECT DISTINCT  NUM_SEQUENCIAL, TIPO_CIRURGIA FROM MX_LISTAS_ESPERA

  WHERE NUM_SEQUENCIAL in (SELECT DISTINCT NUM_SEQUENCIAL FROM MX_LISTAS_ESPERA)

  ORDER BY NUM_SEQUENCIAL", corta a linha repetida de 14635 N

[table]

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

 

    [td]S[/td]

 

 

    [td]N[/td]

 

 

    [td]N[/td]

 

 

    [td]S[/td]

 

[/table]

Penso que é isso k ele quer!! digo eu...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
SoulOnFire    0
SoulOnFire

14635 N

14635 S

tens isto no último resultado, penso que ele quer que o 14635 apareça apenas uma vez.

Ok...já percebi...

Se for assim n tem hipoteses.... tipo n n há forma de criar essa excepção... acho...

Mas tb n vejo logica disso s tem dados diferentes para k obter so 1 deles... mas pronto

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
naoliveira    0
naoliveira
Porque ao fazer :

SELECT DISTINCT utilizador  FROM utilizadores -> ele depois so me vai dar o valor do "utilizador" e eu queria do resto dos campos (nome, morada, telefone)

SELECT DISTINCT utilizador, morada, telefone  FROM utilizadores

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos
Porque ao fazer :

SELECT DISTINCT utilizador  FROM utilizadores -> ele depois so me vai dar o valor do "utilizador" e eu queria do resto dos campos (nome, morada, telefone)

SELECT DISTINCT utilizador, morada, telefone  FROM utilizadores

mas assim pode repetir os utilizadores.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
naoliveira    0
naoliveira

não sei porquê, mas tenho a impressão que a morada e o telefone são sempre iguais para cada utilizador repetido (por isso é que ele queria ter também a morada e o telefone), senão não faz sentido nenhum o que ele quer, como já aqui foi dito.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ricardocoimbra    0
ricardocoimbra

Não porque ele assim seleciona utilizadores iguais!

SELECT DISTINCT * FROM utilizadores

WHERE utilizador  in ( SELECT DISTINCT utilizador  FROM utilizadores)

N sera isto que queres??

mas quais dos outros atributos de um mesmo utilizador é que o SGBD vai escolher?

repetindo a questão que coloquei acima:

mas se é isto que tu queres, qual é o valor que devia ficar associado a 'abc' (por exemplo)? 1 ou 2?

Isso depois é indiferente Rui Carlos o que eu quero mesmo é que ele selecione

abc | 1 | nome | telefone

def | 2 | nome | telefone

Apenas o nome do utilizador é que nao pode ser igual

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RVG    0
RVG

boas mais uma vez....

tenho andado a ler as mensagens, e gostaria de saber qual a fixacao do pessoal pelo "distinct"....

SELECT DISTINCT * FROM utilizadores

WHERE utilizador  in ( SELECT DISTINCT utilizador  FROM utilizadores)

SELECT DISTINCT  NUM_SEQUENCIAL, TIPO_CIRURGIA FROM MX_LISTAS_ESPERA

  WHERE NUM_SEQUENCIAL in (SELECT DISTINCT NUM_SEQUENCIAL FROM MX_LISTAS_ESPERA)

  ORDER BY NUM_SEQUENCIAL,corta a linha repetida de 14635 N

ja experimentaram fazer testes com estas queries ?

@SoulOnFire, se a ideia é remover o 14635 N, un group by Num_sequencial, tipo_cirurgia, nao sera melhor do que fazer 2 distinct e uma sub-querie ?

Isso depois é indiferente Rui Carlos o que eu quero mesmo é que ele selecione

abc | 1 | nome | telefone

def | 2 | nome | telefone

mais uma vez, o servidor é que escolhe....  ;)

morada e telefone, estao na tabela utilizadores ou noutra tabela?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

Acho melhor resumir isto no seguinte:

Isso não funciona. Tens de separar em duas tabelas ou ter campos repetidos na mesma tabela (não normalizado).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade