Archief - [SQL] Unieke e-mailadressen ophalen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Anoniem15

Legacy Member
Mijn tabel ziet er als volgt uit MAIL | NAAM | VOORNAAM.
Bepaalde mensen gebruiken hetzelfde e-mailadres omdat ze bijvoorbeeld tot hetzelfde gezin behoren. Nu zou ik een query willen uitvoeren die enkel de unieke e-mailadressen en de eerste persoon die hij tegenkomt met adres weergeeft.

Dus bijvoorbeeld:
[email protected] Van Daele Piet
[email protected] Van Daele Kevin
[email protected] De Cock Jan

Zou moeten geven:
[email protected] Van Daele Piet
[email protected] De Cock Jan

Het jammere is dat er een naam ook moet geselecteerd worden, indien ik enkel de e-mailadressen nodig had kon dit eenvoudig met een distinct.

Anoniem15

Legacy Member
SQL State: 42803
Vendor Code: -122
Message: [SQL0122] Column NAMBL8 or expression in SELECT list not valid. Cause . . . . . : One of the following has occurred: -- The statement contains column name NAMBL8 and an aggregate function in the SELECT clause and no GROUP BY clause is specified. -- Column name NAMBL8 is specified in the SELECT clause but not in the GROUP BY clause. -- An expression is specified in the SELECT clause but not in the GROUP BY clause. -- A column or expression that is specified in the ORDER BY clause, but not in the SELECT clause, does not conform to the grouping rules listed above. Recovery . . . : Do one of the following and try the request again: -- If a GROUP BY clause is required, make certain that all columns or expressions in the SELECT list and ORDER BY clause are also in the GROUP BY clause. -- If a GROUP BY clause is not needed, the SELECT list and ORDER BY clause should not contain aggregate functions with column names.

Voor alle duidelijkheid: NAMBL = Naam, PRNBL = Voornaam

Cycloon

Legacy Member
Code:
SELECT mail, max(naam), max(voornaam) FROM Users GROUP BY mail

Maar dat hangt een beetje af van je vendor. Als dit niet werkt moet je het merk van je SQL database vermelden.
Uiteraard verlies je hiermee data :)

t0tec

Legacy Member
Lijkt me een error van DB2 als ik via google zoek.

Je moet aggregatie functies gebruiken bij group by meen ik mij te herinneren. (zoals hierboven)

dJeez

Legacy Member
T0tec zei:
Lijkt me een error van DB2 als ik via google zoek.

Je moet aggregatie functies gebruiken bij group by meen ik mij te herinneren. (zoals hierboven)
Neen, de error is eerder MySQL. Standaard SQL(-92 - voorzover ik mij herinner :p) laat geen group by toe zonder aggregates van kolommen die niet in je group by staan.

Een subquery gebruiken zou kunnen helpen...

Ervan uitgaande dat je een ID in de tabel hebt (indien niet : dom, dom, dom) zou iets als :
Code:
SELECT mail, naam, voornaam FROM Users u
INNER JOIN (SELECT mail, min(id) as id FROM Users GROUP BY mail) x ON x.id=u.id
wel moeten werken denk ik.

Anoniem15

Legacy Member
Het is geen MySQL hoor, maar effectief DB2. Ik zal het maandag nog eens proberen.

dJeez

Legacy Member
Wonkelrijm zei:
Het is geen MySQL hoor, maar effectief DB2. Ik zal het maandag nog eens proberen.
Dat was op die post met group by bedoeld die geen aggregates gebruikte, en dat afdeed als een bug in DB2... Er zijn er nogal wat die slechte methodes aanleren en ervan uitgaan dat die MySQL hacks overal werken. MySQL is a bad puppy in SQL land :p.

Cycloon

Legacy Member
dJeez zei:
Dat was op die post met group by bedoeld die geen aggregates gebruikte, en dat afdeed als een bug in DB2... Er zijn er nogal wat die slechte methodes aanleren en ervan uitgaan dat die MySQL hacks overal werken. MySQL is a bad puppy in SQL land :p.

Ik ken wel meerdere databases die dit toelaten. Soms is dat wel handig, anderzijds is het een kleine moeite om zelf iets zinvol te definiëren (min, max, etc ipv je database de keuze te laten).

En elke vendor heeft zo wel iets specifiek. Elke specificatie laat altijd wel wat interpretatie toe en sommigen vinden de specificatie dan ook weer ondermatig en brengen daar verbeteringen op aan. Daarom zijn ze dus niet persé slecht.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan