[SQL]Select *, Distinct en ontdubbelen

Pagina: 1
Acties:
  • 2.518 views sinds 30-01-2008
  • Reageer

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:35
Ben bezig met een kleine applicatie die emailadressen van een bestaande db naar een nieuwe db moet verschuiven.

In de nieuwe db heb ik een Unieke key op het emailadres gezet.
Nu is het zo dat er in de oude her en der wat dubbele emailadressen voorkomen.

Deze wil ik er meteen uitfilteren met een query.

De truuk hierin is dat we met een query alle data eruit willen halen, maar wel met unieke mailadressen.

Geloof het of niet, dit kost me nu al een 1 zoekwerk, help en rommelen in de query analyzer.

De query
SQL:
1
select distinct(emailadressen) from mail_contacts
levert netjes unieke records op. Weliswaar alleen de mailadressen maar goed.

Maar ik wil gelijk alle data (kleine 20 velden) in de DataSet hebben.

De query tot zover:
SQL:
1
2
3
4
5
select * from mail_contacts 
        where mailerid  not in 
             (select a.mailerid from mail_contacts a 
                      inner join mail_contacts b on a.emailadres = b.emailadres
                      and a.mailerid>b.mailerid)
Op een of andere manier krijg ik het idee dat dit wel eens zoveel simpeler kan.

De gebruikte DB server is MS SQL 2000.
Heeft iemand een idee of moet dit echt zo "ingewikkeld" zijn.

Het eigenlijke probleem heb ik met bovenstaande query opgelost, het ging hier maar om 1200 a 1300 records, maar ik zou graag willen weten of het niet simpeler kan.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Jij moet beslissen welke van de andere velden je mee wilt nemen, stel dat je het volgende voorbeeld hebt:

Email, Naam, Woonplaats
email@domein.nl, Peter, Groningen
email@domein.nl, Peter de B, Groningen

Ik neem aan dat je te maken hebt met bovenstaande situatie. In dit geval moet jij beslissen welke van de Namen je wilt bewaren voor het emailadres 'email@domein.nl', dit kun je doen met GROUP BY en aggregate functies.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:35
Je hebt het inderdaad goed wat betreft de (reeds opgeloste) situatie.

Group by is inderdaad een oplossing. Maar stel nou dat ik als het ware een beetje "lui" ben, en toch gebruik wil maken van een select * ... in plaats van alle velden te selecten. Volgens mij kom je dan niet echt ver met een group by.
P_de_B schreef op dinsdag 16 augustus 2005 @ 16:16:
[...]
Nee, dat klopt, maar je moet niet lui zijn.
Agreed. Kreeg alleen het idee dat ik erg omslachtig bezig was.

[ Voor 29% gewijzigd door TeeDee op 16-08-2005 16:20 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
TeeDee schreef op dinsdag 16 augustus 2005 @ 16:14:
Je hebt het inderdaad goed wat betreft de (reeds opgeloste) situatie.

Group by is inderdaad een oplossing. Maar stel nou dat ik als het ware een beetje "lui" ben, en toch gebruik wil maken van een select * ... in plaats van alle velden te selecten. Volgens mij kom je dan niet echt ver met een group by.
Nee, dat klopt, maar je moet niet lui zijn.

Oops! Google Chrome could not find www.rijks%20museum.nl