Guest hcardoso Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 boasimaginem que tenho uma tabela com o nome de pessoas e o nome da cidade onde vivem:id - nome - cidade-------------------------1 - hugo - porto2 - telmo - leiria3 - rui - lisboa4 - joão - porto5 - joel - aveiro6 - pedro - leiriaeu preciso de uma consulta à tabela que me devolva apenas os registos das pessoas que vivem em cidades onde vive mais alguém...neste caso devolveria:1 - hugo - porto4 - joão - porto2 - telmo - leiria6 - pedro - leiriaa questão é que isto tem que ser feito sem ser necessário fornecer o nome das cidades no SQL. a consulta tem que fazer a analise sozinha.alguém me ode ajudar?desde já agradeço a ajuda. Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 NÃO fique postando o mesmo tópico em vários partes do fórum... e aprenda a usar a busca... http://scriptbrasil.com.br/forum/index.php?showtopic=109178 Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 peço desculpa pela duplicação.quanto à minha questão...o post que sugeriste não serve para aquilo que pretendo.eu preciso que ele devolva os registo que têm cidades repetidas. tem que excluir os registos cujas cidades só aparecem num registo.brigado pela ajuda Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Você quer manter apesar os duplicados e excluir os outros? Então usa subquery...DELETE FROM tabela WHERE id NOT IN (SELECT id, COUNT(*) reg_dup FROM tabela HAVING reg_dup > 1)Acho que a sintaxe tá correta... mas a idéia é essa.. apagar todos, com exceção dos que forem duplicados... Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest hcardoso Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 boaseu não quero excluir nenhum registo. quero que todos se mantenham na base de dados, mas a query ne devolva apenas aqueles em que as cidades têm mais que um habitante.por isso tentei alterar o que sugeriste:SELECT * FROM xteste WHERE cidade IN (SELECT cidade, COUNT(*) reg_dup FROM xteste HAVING COUNT(*) > 1 ORDER BY cidade ASC)mas recebi o erro:Erro na query: SELECT * FROM xteste WHERE cidade IN (SELECT cidade, COUNT(*) reg_dup FROM xteste HAVING COUNT(*) > 1 ORDER BY cidade ASC).Operand should contain 1 column(s)esto no bom caminho ou nem por isso? Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Mas se você quer APENAS OS DUPLICADOS, o caminho foi o que eu falei primeiro...SELECT *, COUNT(*) reg_dup FROM tabela GROUP BY coluna HAVING reg_dup > 1Isso retornar APENAS os registros duplicados... Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest hcardoso Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 boas já estou a dar em maluco com isto ;) com esta linha que sugeres:SELECT *, COUNT(*) reg_dup FROM xteste GROUP BY cidade HAVING reg_dup > 1da tabela:id - nome - cidade-------------------------1 - hugo - porto2 - telmo - leiria3 - rui - lisboa4 - joão - porto5 - joel - aveiro6 - pedro - leiriaapenas me são devolvidos os registos:2 - telmo - leiria1 - hugo - portoe eu preciso que apresente:1 - hugo - porto4 - joão - porto2 - telmo - leiria6 - pedro - leiriapenso que o "group by" está a impedir que sejam apresentados todos os registos Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Sim... o GROUP BY "agrupa" todos os ítens duplicados... remove ele e coloca em um laço para exibir tudo... Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest hcardoso Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Sim... o GROUP BY "agrupa" todos os ítens duplicados... remove ele e coloca em um laço para exibir tudo...boasdesculpa a minha ignorancia, mas o que é um laço?obrigado pela paciencia Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Laço é o que se usa para pegar todos os registros retornados de um query... isso leva outros nomes, dependendo da linguagem de programação que você estiver usando... mas como você já conseguiu resgatar os dados (no caso com a query com group by), então ignore o meu comentário... Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest hcardoso
boas
imaginem que tenho uma tabela com o nome de pessoas e o nome da cidade onde vivem:
id - nome - cidade
-------------------------
1 - hugo - porto
2 - telmo - leiria
3 - rui - lisboa
4 - joão - porto
5 - joel - aveiro
6 - pedro - leiria
eu preciso de uma consulta à tabela que me devolva apenas os registos das pessoas que vivem em cidades onde vive mais alguém...
neste caso devolveria:
1 - hugo - porto
4 - joão - porto
2 - telmo - leiria
6 - pedro - leiria
a questão é que isto tem que ser feito sem ser necessário fornecer o nome das cidades no SQL. a consulta tem que fazer a analise sozinha.
alguém me ode ajudar?
desde já agradeço a ajuda.
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados