Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Massa Urbana

Selecionando e Deletando string repetidas

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você esta usando SQL Server?

 

Pq este exemplo é para access.

 

Mas o caminho é por ai.

 

Por favor confirme qual banco você esta usando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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'

Compartilhar este post


Link para o post
Compartilhar em outros sites

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())

Compartilhar este post


Link para o post
Compartilhar em outros sites

-- 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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

-- 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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.