[MySql] GROUP BY result blijkt niet uniek

Pagina: 1
Acties:

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 28-11-2025

BierPul

2 koffie graag

Topicstarter
Ik probeer een lijstje emailadressen te ontdubbelen in een MySQL database.

Hiervoor gebruik ik gewoon een simpele GROUP BY functie

code:
1
SELECT email FROM adressen GROUP BY email


Deze geeft gewoon de gehele tabel terug, op zich zou dat natuurlijk kunnen maar ik weet zeker dat mijn adres er bijvoorbeeld dubbel in staat.

Als ik in MyAdmin het veld een Unique value toeken begint ie te mauwen over een duplicate entry.

Ik heb ook een query met DISTINCT functie geprobeerd maar ook zonder resultaat.

Ik gebruik MySQL versie 3.23.49 maar kan daar ook geen bugs over vinden, doe ik nou iets heel erg fout of is dit gewoon een gemis aan MySQL ?

Ja man


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Wat wil je precies zien in je query?, nu zijn dat alle unieke waarden.
Wil je niet alle waarden die meer dan eens voorkomen?
code:
1
2
3
4
SELECT email 
FROM adressen 
GROUP BY email
HAVING count(*) > 1

Who is John Galt?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Distinct zou gewoon moeten werken, wat heb je precies geprobeerd en wat was het resultaat?

overigens zou technisch gezien hetgeen je hier post ook een rij met uniek waarden op moeten leveren, maar hier is GROUP BY eigenlijk niet voor

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


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 28-11-2025

BierPul

2 koffie graag

Topicstarter
Nope ik wil een lijst met unieke adressen (is voor een prijsvraag), echter heb ik net ook even op een MySQL 4.1.9 server getest en dit gaat aanzienlijk beter :)

Dezelfde query geeft 304 minder results :)

[ Voor 13% gewijzigd door BierPul op 14-11-2005 10:05 ]

Ja man


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:41
Dit is niet waar GROUP BY voor gemaakt is. GROUP BY hoor je te gebruiken icm met aggregrate functies zoals MAX(), MIN(), AVG() etc. (hoewel het hier in een test wel gewoon werkt..) Als je unieke resultaten wil hoor je idd DISTINCT te gebruiken. Staat er niet toevallig bij een record nog een spatie achter ofzo? Als dat niet zo is, is er serieus iets met MySQL aan de hand denk ik.

Roomba E5 te koop


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 28-11-2025

BierPul

2 koffie graag

Topicstarter
Normaal gesproken gebruik ik hier ook DISTINCT voor , maar als iets niet functioneert dan wordt je toch snel hopeloos en ga je proberen :)

Maar in MySQL4 database gaat het aanzienlijk beter dus ik gooi de schuld naar MySQL.

Alhoewel er verder geen bugs bekend zijn

ps: Alle velden zijn natuurlijk eerst netjes geTRIMt ;)

Ja man


Verwijderd

Als
code:
1
2
SELECT DISTINCT email
FROM adressen

niet werkt kan je misschien dit doen

code:
1
2
3
SELECT email, count(*)
FROM adressen
GROUP BY email

[ Voor 32% gewijzigd door Verwijderd op 14-11-2005 10:19 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:06
een group by moet je niet gebruiken om te 'ontdubbelen', want daar is het niet voor bedoeld.
Een group by is om te groeperen icm met aggregaat functies.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23-04 23:33

curry684

left part of the evil twins

Een RDBMS met een beetje fatsoenlijke query optimizer hoort deze query intern gewoon als een DISTINCT uit te voeren. Dat GROUP BY er niet voor bedoeld is klopt natuurlijk, maar neemt niet weg dat het in dit geval gewoon hoort te werken en deze resultaten dus ronduit fout zijn.

Professionele website nodig?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
curry684 schreef op maandag 14 november 2005 @ 10:19:
Een RDBMS met een beetje fatsoenlijke query optimizer hoort deze query intern gewoon als een DISTINCT uit te voeren. Dat GROUP BY er niet voor bedoeld is klopt natuurlijk, maar neemt niet weg dat het in dit geval gewoon hoort te werken en deze resultaten dus ronduit fout zijn.
MS SQL Server voert ze inderdaad gelijk uit, maar wel beide als een GROUP BY volgens het executieplan. ('Hash Match / Aggregate')

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


  • crazyx
  • Registratie: Juli 2001
  • Laatst online: 04-04 14:31
Volgens mij moet dit werken :

code:
1
2
3
SELECT DISTINCT email
FROM adressen
ORDER BY email ASC

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23-04 23:33

curry684

left part of the evil twins

P_de_B schreef op maandag 14 november 2005 @ 10:24:
[...]


MS SQL Server voert ze inderdaad gelijk uit, maar wel beide als een GROUP BY volgens het executieplan. ('Hash Match / Aggregate')
Hangt er maar vanaf natuurlijk of je een GROUP BY op alle beschikbare kolommen als een DISTINCT ziet of andersom :+ Hetzelfde resultaat geven ze (op normale DB's) toch wel ;)

Professionele website nodig?

Pagina: 1