• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joxnas

Só mostrar dados diferentes de cada campo..

9 mensagens neste tópico

Exemplo de tabela:

id  |  Cidade  |

1    |  Lisboa    |

2    |  Lisboa    |

3    |  Porto    |

Queria uma query que selecionasse só Rows em que o valor  do campo 'Cidade' era diferente do valor das row anteriores ou seja o resultado seria este:

id  |Cidade|

1    |Lisboa|

3    |Porto  |

Alguem sabe como?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja tive pai 2 horas a procurar isto e logo a seguir a escrever encontro a solução lol...

SELECT id, cidade FROM *  GROUP BY cidade

Acho que é isto :cheesygrin: desculpem por ter feito um post automaticamente respondido.. :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

joxnas dessa maneira mostra-te tudo, e não elimina os duplicados das cidades (acho que é isso que ele quer).

Para além de estar mal porque o FROM não pode ter o *. O SELECT é que pode seleccionar todos os campos (*), o FROM não pode!

Tens de usar o DISTINCT:

SELECT id, DISTINCT(Cidade)

FROM tabela

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode-se fazer distinct a um único campo? Não sabia disso. Mas neste caso como é que ele vai saber qual dos ids usar?

Eu faria na mesma com o Group By, mas com uma pequena alteração.

Select Min(id), cidade

From tabela

Group By cidade

Mas o facto de precisares de fazeres este tipo de query é porque provavelmente tens a base de dados mal estruturada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o FROM * era so pa dizer que era um nome duma tabela qualquer, é claro que eu n ia por * em FROM no mysql..

E eu testei:

SELECT name, region FROM bbc GROUP BY region

Neste site e resultou.....

E já agora --vejam isto--

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois no MySQL dá porque eles tratam isso, apesar que isso só existe no MySQL por questões de performance.

Em standard SQL essa query é inválida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o facto de precisares de fazeres este tipo de query é porque provavelmente tens a base de dados mal estruturada.

Achas? Se por exemplo se tratar de uma tabela posts em que um dos campos é o mes em que o post foi feito e eu quiser mostrar uma lista com todos os meses em que foram feitos posts,como é que eu ia organizar a tabela duma maneira melhor?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isso já são casos diferentes. Para isso seria a seguinte query

Select distinct mes from tabelaPosts

São querys de tipos diferentes.

A "estranheza" da query inicial é queres agrupar os valores por um determinado campo, e queres mostrar um outro campo da tabela ( id ) sem usares uma função de agregação e sem meter esse campo na cláusula do Group By. Isso normalmente acontece quando esse campo fica constante em relação aos que foram referenciados no Group By. Nesses casos, em sql standard, mete-se esse campo no Group By na mesma porque o resultado vai ser igual. Na tua tabela o Id não vai ser constante ao agrupamento por cidade. Quando não é constante é porque se pretende usar uma função de agregação, como somar os salários de empregrados, saber o aluno mais velho, etc... o que não é este o caso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Expliquei-me mal então porque o que me interessa é so mesmu um campo... nem precisava do id para nada. Só queria uma tabela com todos os nomes de cidades que existiam sem que estes se repetissem. Aparecer o primeiro id correspondente a cada cidade ou nao aparecer era facultativo.

SELECT DISTINCT mesFROM tabelaPosts

Bem, então vou usar isto já que é o mais correcto para o meu caso :cheesygrin:

0

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