ricardocoimbra 0 Posted July 25, 2007 Report Share Posted July 25, 2007 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? Link to post Share on other sites
Tiago Salgado 2 Posted July 25, 2007 Report Share Posted July 25, 2007 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 ? Link to post Share on other sites
ricardocoimbra 0 Posted July 25, 2007 Author Report Share Posted July 25, 2007 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 ? Link to post Share on other sites
ricardocoimbra 0 Posted July 25, 2007 Author Report Share Posted July 25, 2007 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 ? Link to post Share on other sites
Rui Carlos 359 Posted July 25, 2007 Report Share Posted July 25, 2007 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? Rui Carlos Gonçalves Link to post Share on other sites
ricardocoimbra 0 Posted July 26, 2007 Author Report Share Posted July 26, 2007 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? Link to post Share on other sites
Hipnoted 3 Posted July 26, 2007 Report Share Posted July 26, 2007 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. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência" Link to post Share on other sites
ricardocoimbra 0 Posted July 26, 2007 Author Report Share Posted July 26, 2007 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. Link to post Share on other sites
Rui Carlos 359 Posted July 26, 2007 Report Share Posted July 26, 2007 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. Rui Carlos Gonçalves Link to post Share on other sites
SoulOnFire 0 Posted July 26, 2007 Report Share Posted July 26, 2007 SELECT DISTINCT * FROM utilizadores WHERE utilizador in ( SELECT DISTINCT utilizador FROM utilizadores) N sera isto que queres?? Fikem Bem!!!Miguel Duarte - (SoulOnFire)O meu BLOG - XAML E WPF - http://wpfpt.wordpress.com/ Link to post Share on other sites
Rui Carlos 359 Posted July 26, 2007 Report Share Posted July 26, 2007 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. Rui Carlos Gonçalves Link to post Share on other sites
SoulOnFire 0 Posted July 26, 2007 Report Share Posted July 26, 2007 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... Fikem Bem!!!Miguel Duarte - (SoulOnFire)O meu BLOG - XAML E WPF - http://wpfpt.wordpress.com/ Link to post Share on other sites
Rui Carlos 359 Posted July 26, 2007 Report Share Posted July 26, 2007 14635 N 14635 S tens isto no último resultado, penso que ele quer que o 14635 apareça apenas uma vez. Rui Carlos Gonçalves Link to post Share on other sites
SoulOnFire 0 Posted July 26, 2007 Report Share Posted July 26, 2007 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 Fikem Bem!!!Miguel Duarte - (SoulOnFire)O meu BLOG - XAML E WPF - http://wpfpt.wordpress.com/ Link to post Share on other sites
naoliveira 0 Posted July 26, 2007 Report Share Posted July 26, 2007 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 Link to post Share on other sites
Rui Carlos 359 Posted July 26, 2007 Report Share Posted July 26, 2007 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. Rui Carlos Gonçalves Link to post Share on other sites
naoliveira 0 Posted July 26, 2007 Report Share Posted July 26, 2007 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. Link to post Share on other sites
ricardocoimbra 0 Posted July 26, 2007 Author Report Share Posted July 26, 2007 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 Link to post Share on other sites
RVG 0 Posted August 9, 2007 Report Share Posted August 9, 2007 boas mais uma vez.... tenho andado a ler as mensagens, e gostaria de saber qual a fixacao do pessoal pelo "distinct".... SELECT DISTINCT * FROM utilizadoresWHERE 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? Link to post Share on other sites
shumy 16 Posted August 9, 2007 Report Share Posted August 9, 2007 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). Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática! Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now