webForumDet fria alternativet

Visa även om relation saknas

Databaser & SQLur Databashanterare & SQL

2 svar · 177 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Frågan#1

Jag har gett mig ut på för djupt vatten och skulle uppskatta om någon ville hjälpa mig att få ordning på nedanstående fråga som körs i ASP på en Access-databas.

Jag har tre tabeller:

  • pers_personnel
  • pers_categoryrelations
  • pers_categories

pers_personnel innehåller information om användare och hänger ihop med pers_categoryrelations genom "userid". Den senare tabellen innehåller som namnet antyder information om vilka kategorier som användaren tillhör och hänger i sin tur ihop med pers_categories genom "categoryid".

Jag försöker lista alla kategorier i en tabell och även visa hur många personer som tillhör varje kategori. LarsG visade mig tidigare hur man åstadkommer detta med två tabeller som hänger samman med ett id, men jag blir lite förvirrad när det kommer in en tredje tabell i bilden. Detta är vad jag försökt med. Frågan ger resultat, men utelämnar kategorier som inte har några användare så jag antar att det är "JOIN:arna" som är fel. Jag vill alltså även visa de kategorier som ännu inte innehåller några användare.

SELECT COUNT(p.userid) AS perscount, c.categoryid, c.name, c.description
FROM (pers_personnel AS p LEFT OUTER JOIN pers_categoryrelations AS r ON p.userid = r.userid)
LEFT OUTER JOIN pers_categories AS c ON r.categoryid = c.categoryid
GROUP BY c.categoryid, c.name, c.description
Medlem sedan dec. 200012 464 inlägg
#2

Då du har en left join så innebär det att alla poster från pers_personnel kommer med. Du kan antingen byta till en right join

SELECT COUNT(p.userid) AS perscount, c.categoryid, c.name, c.description
FROM (pers_personnel AS p right OUTER JOIN pers_categoryrelations AS r ON p.userid = r.userid)
right OUTER JOIN pers_categories AS c ON r.categoryid = c.categoryid
GROUP BY c.categoryid, c.name, c.description

eller så kan du byta ordning så att du har pers_categories som första tabell i from.

Medlem sedan apr. 20012 427 inlägg
#3

Tack ännu en gång LarsG! Jag ska se till att läsa på lite om "joins". :)

127 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)