Just nu i M3-nätverket
Gå till innehåll

LÖST: Slå samman information


.sun

Rekommendera Poster

Jag har tre tabeller, GROUPS, STORES och VENDORS. Den första är en lista på fem rader med olika butiksgrupper. Den andra innehåller över 400 butiker. Varje butik tillhör en butiksgrupp. Den sista är en lista över säljare, och nästan alla säljare tillhör en butik (de som inte tillhör en butik har värdet 0 för storeid).

 

Jag vill nu lista alla butiksgrupper, samt hur många butiker som hör till varje grupp. SQL-frågan "SELECT g.id, COUNT(s.id) FROM GROUPS g INNER JOIN STORES s ON s.groupid = g.id GROUP BY g.id" ger mig då:

 

grupp butiker

1 66

2 22

3 45

4 84

5 249

 

Piece of kaka. Men nu vill jag även slänga med en tredje kolumn med antal säljare som indirekt hör till resp grupp iom att de tillhör en butik. Det finns alltså ingen info om grupptillhörighet i VENDORS-tabellen, utan jag måste gå via STORES för att få fram den infon.

 

Glad ihågen slängde jag bara på en INNER JOIN till och höll tummarna: "SELECT g.id, COUNT(s.id), COUNT(v.id) FROM GROUPS g INNER JOIN STORES s ON s.groupid = g.id INNER JOIN VENDORS v ON v.storeid = s.id GROUP BY g.id" så får jag:

 

grupp butiker säljare

1 29 29

2 17 17

3 32 32

4 31 31

5 62 62

 

Inte helt trovärdigt - antalet butiker har ju förändrats. Manuell kontroll visar dock att säljarkolumnen är korrekt - så vad har hänt med butikskontrollen? Har provat olika kombinationer av INNER/LEFT/RIGHT JOIN, och jag kan få nästan rätt siffror för butikerna, de är liite för höga bara: 80, 27, 54, 87 samt 262 istf som i översta tabellen.

 

INNER JOINs är inte min starka sida - vad har jag missat?

 

 

He he - lite fortsatt googlande gav denna sida http://bugs.mysql.com/bug.php?id=8821 - där föreslås både att byta INNER JOIN mot WHERE IN, eller att använda DISTINCT ihop med COUNT. Jag prövade det sistnämnda: "COUNT(DISTINCT id)" och då stämde båda kolumnerna.

 

Tack för att du tog din tid att läsa iaf!

[inlägget ändrat 2006-11-09 16:30:38 av .sun]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...