[MySQL] Self join?

Pagina: 1
Acties:

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 07-08 04:17

Fatamorgana

Fietsen is gezond.

Topicstarter
Ik zit nu al een paar uur met een probleem wat ik gewoon ff niet zie.

Ik heb en tabel met de volgende gegevens:

id, name, province

de vulling is bv:

1 bert Gelderland
2 hans Zeeland
3 klaas Gelderland

Nu wil ik hier uit de max id's en namen hebben per provincie.

Dus het resultaat van de query moet zijn:

2 hans Zeeland
3 klaas Gelderland

Ik heb al met joins zitten te rotzooien en wat al niet, maar ik kom er echt niet uit. Met een sub-select kan ik het zo, maar dat gaat dus niet in MySQL. Ik heb geen idee wat ik nog kan doen. Kan iemand misschien een hint geven wat ik moet gebruiken? inner join, having of wat dan ook.

Ik heb nu iets als dit:

SELECT MAX(WINNERS.id) AS maxid, WINNERS.name FROM WINNERS INNER JOIN WINNERS as WIN2 ON WINNERS.province = WIN2.province AND WINNERS.id = WIN2.id GROUP BY WIN2.province

Maar dat is dus fout, ik krijg wel de max id's, maar de group gaat fout, daar komt de verkeerde data bij.

Volgens mij is het heel simpel wat ik wil, maar ik kom er gewoon echt ff niet uit.

Aanvulling:

SELECT * FROM WINNERS WHERE id IN(SELECT MAX(id) FROM WINNERS GROUP BY province)

Dit werkt dus in Access, deze moet dus nu ook in MySQL werken. Iemand enig idee?

  • bille
  • Registratie: Mei 2000
  • Laatst online: 06-09 17:10

bille

Don't call me Buff

zowiezo is je tabel niet goed genormaliseerd als je het zo laat.

zou eigelijk moeten zijn:
tblPersoon: id,name,tblProvinceId
tblProvince: id,name

en dan zou het geloof ik moeten werken als je zou doen:
code:
1
2
Select MAX(tblPersoon.id) AS maxID, tblProvince 
From tblProvince Inner join tblPersoon ON tblProvince.id = tblPersoon.tblProvinceId Group By tblProvince.name;

zo.. jou huiswerk is ook weer gemaakt ;)

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 07-08 04:17

Fatamorgana

Fietsen is gezond.

Topicstarter
Op donderdag 11 april 2002 16:29 schreef bille het volgende:
zowiezo is je tabel niet goed genormaliseerd als je het zo laat.

zou eigelijk moeten zijn:
tblPersoon: id,name,tblProvinceId
tblProvince: id,name

zo.. jou huiswerk is ook weer gemaakt ;)
Het grappige is dat ik nu eenmaal deze tabel heb en er GEEN andere tabel bij gaat komen, het MOET zo blijven. Ook is het geen huiswerk, heb ik al in jaren niet meer gehad. :)

Het gaat mij er gewoon om KAN wat ik wil in MySQL in 1 query. En ik kan er niet tegen dat ik die query niet kan bedenken, principe kwestie dus ook.

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

code:
1
2
3
4
SELECT MAX(id) AS maxid
    ,province
FROM   WINNERS
GROUP BY province

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 07-08 04:17

Fatamorgana

Fietsen is gezond.

Topicstarter
Op donderdag 11 april 2002 21:08 schreef Goodielover het volgende:
code:
1
2
3
4
SELECT MAX(id) AS maxid
    ,province
FROM   WINNERS
GROUP BY province
En dit werkt dus niet, want dan grouped hij de verkeerde data bij de verkeerde provincie. De maxid's kloppen, maar de data die daarbij hoort niet.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09-09 21:25

Creepy

Tactical Espionage Splatterer

Een join met zichzelf??
Kan op deze manier:
code:
1
2
3
SELECT * FROM blaat b1, blaat b2
WHERE and b1.dinges > b2.dinges
and b1.blaat=b2.blaat

Zelf nog ff aanpassen voor je eigen probleem :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

code:
1
2
3
4
SELECT MAX(concat_ws(":",lpad(id,8,"0"),naam) AS ID_______Naam
    ,province
FROM   WINNERS
GROUP BY province

Hiermee haal je dus de maxID en naam in 1 max op.
Het nummer wordt ge-lpad tot een lengte van 8 met nullen.

Uitvoer zou dan als volgt zijn:
code:
1
2
3
4
ID_______Naam    Provincie
---------------- ---------
00000002:Pietje  Groningen
00000003:Klaasje Drente
Pagina: 1