Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu acho que é simples mas não vejo solução.
Eu tenho uma tabela que existe algumas strings repetidas
por exemplo:
JOSÉ
JOSÉ
MARIA
ANA
JOÃO
JOÃO
FERNANDO
ai queria selecionar e deletar as que tenham repedidas, ou seja, na hora que eu selecionar ia aparecer:
JOSÉ
JOSÉ
JOÃO
JOÃO
Alguém sabe fazer?
absss
cara...
distinct traz o contrário do que eu qro...
Dá uma pesquisa na área de tutorias: http://forum.imasters.com.br/index.php?/forum/186-artigos-tutoriais-e-materias-sql-server/
Lá têm um post para deletar duplicados.
E pesquise por EXITS
hummm...
vou da uma olhada...
então...
eu vi um cara com o problema parecido e fiz assim...
Select cdparticipante, nmAmigo, a.dsemailamigo, a.dtindicacao
From tb_indicacaoamigo as a
Where a.dsemailamigo In
(Select b.dsemailamigo
From tb_indicacaoamigo as b
Group By b.dsemailamigo
Having Count(b.dsemailamigo) > 1)
order by dsemailamigo, dtindicacao, cdparticipante desc
funciona assim?
aqui comigo aparentemente apareceu resultado mas não sei se é o certo fazer assim.
você esta usando SQL Server?
Pq este exemplo é para access.
Mas o caminho é por ai.
Por favor confirme qual banco você esta usando.
>
você esta usando SQL Server?
Pq este exemplo é para access.
Mas o caminho é por ai.
Por favor confirme qual banco você esta usando.
SQL Server
e funcionou aparentemente.
O Having é where do group by.
Se não me falha a memória no SQL 200 não existia o Havin, mas não tenho certeza.
É tando banco de dados acces, mysql, postgresql, oracle que confunde a cabeça do cidadão.
Mas o caminho é por ai. Pode IN, EXISTS ou WHERE campo = (select)
>
hummm...
vou da uma olhada...
então...
eu vi um cara com o problema parecido e fiz assim...
Select cdparticipante, nmAmigo, a.dsemailamigo, a.dtindicacao
From tb_indicacaoamigo as a
Where a.dsemailamigo In
(Select b.dsemailamigo
From tb_indicacaoamigo as b
Group By b.dsemailamigo
Having Count(b.dsemailamigo) > 1)
order by dsemailamigo, dtindicacao, cdparticipante desc
funciona assim?
aqui comigo aparentemente apareceu resultado mas não sei se é o certo fazer assim.
Funciona sim, porem pelo que entendi da sintaxe, ele soh traz os repetidos nao? O_o
Qdo forem unicos nao traz no select.... se for isso que precisa....
>
O Having é where do group by.
Se não me falha a memória no SQL 200 não existia o Havin, mas não tenho certeza.
É tando banco de dados acces, mysql, postgresql, oracle que confunde a cabeça do cidadão.
Mas o caminho é por ai. Pode IN, EXISTS ou WHERE campo = (select)
No SQL2000 tem o having sim :P
monte de banco de dados? que nada.. imagina tudo junto com link de 100gb e replicacao entre eles... pois eh.. meu mundo hj em dia http://forum.imasters.com.br/public/style_emoticons/default/devil.gif
>
Funciona sim, porem pelo que entendi da sintaxe, ele soh traz os repetidos nao? O_o
Qdo forem unicos nao traz no select.... se for isso que precisa....
Isso, é o que eu quero.
Ah entao beleza se funciona está tranquilo... haha... :)
Mas agora irei complicar.. http://forum.imasters.com.br/public/style_emoticons/default/devil.gif
rsrsrs...
Dentre esses selecionados de figurinha repetida eu quero apenas deixar o mais antigo de cada um, por exemplo, se tem dois Maria um colocado hj e outra semana passada, o de semana passada irá ficar.
Isso realmente nao faço a mínima idéia, e cara, a tabela tem mais de 110mil linhas, logo vai ser difícil limpar um por um. :/
Sento e choro? Ou alguem consegue me mostrar o camiho? X_X'
Como você sabe qual é o mais antigo, tem algum campo com a data de cadastro?
Ou a tabela tem algum campo identity?
>
Como você sabe qual é o mais antigo, tem algum campo com a data de cadastro?
Ou a tabela tem algum campo identity?
Sim, existe uma coluna de data (gatedate())
-- com a query abaixo você retorna todos os registros repetidos, como ja foi dito...
Select a.cdparticipante, a.nmAmigo, a.dsemailamigo, a.dtindicacao
From tb_indicacaoamigo as a
join ( Select dsemailamigo
From tb_indicacaoamigo
Group By dsemailamigo
Having Count(dsemailamigo) > 1 ) B on A.dsemailamigo = B.dsemailamigo
order by a.dsemailamigo, a.dtindicacao, a.cdparticipante desc
-- Vamos incrementa-la para retornar o mais antigo.
Select A.cdparticipante, A.nmAmigo, a.dsemailamigo, a.dtindicacao
From tb_indicacaoamigo as a
join ( Select dsemailamigo , MIN(COLUNA_DATA) COLUNA_DATA
From tb_indicacaoamigo
Group By dsemailamigo
Having Count(dsemailamigo) > 1 ) B on A.dsemailamigo = B.dsemailamigo and a.COLUNA_DATA = B.COLUNA_DATA
order by A.dsemailamigo, A.dtindicacao, A.cdparticipante desc
Da uma analisada nessa segunda query e ve se te ajuda...
>
-- com a query abaixo você retorna todos os registros repetidos, como ja foi dito...
Select a.cdparticipante, a.nmAmigo, a.dsemailamigo, a.dtindicacao
From tb_indicacaoamigo as a
join ( Select dsemailamigo
From tb_indicacaoamigo
Group By dsemailamigo
Having Count(dsemailamigo) > 1 ) B on A.dsemailamigo = B.dsemailamigo
order by a.dsemailamigo, a.dtindicacao, a.cdparticipante desc
-- Vamos incrementa-la para retornar o mais antigo.
Select A.cdparticipante, A.nmAmigo, a.dsemailamigo, a.dtindicacao
From tb_indicacaoamigo as a
join ( Select dsemailamigo , MIN(COLUNA_DATA) COLUNA_DATA
From tb_indicacaoamigo
Group By dsemailamigo
Having Count(dsemailamigo) > 1 ) B on A.dsemailamigo = B.dsemailamigo and a.COLUNA_DATA = B.COLUNA_DATA
order by A.dsemailamigo, A.dtindicacao, A.cdparticipante desc
Da uma analisada nessa segunda query e ve se te ajuda...
Oka...
vo testa e depois eu do um toq ...
vlww..
Massa Urbana, há exemplos no fórum sobre o uso do DISTINCT
Abçs