Använd:
SELECT u.userid,
u.username,
COALESCE(f.numFiles, 0) AS numFiles,
COALESCE(p.numPhotos, 0) AS numFiles,
COALESCE(g.numGroups, 0) AS numGroups
FROM [USER] u
LEFT JOIN (SELECT t.userid,
COUNT(*) AS numFiles
FROM [FILES] t
GROUP BY t.userid)f ON f.userid = u.userid
LEFT JOIN (SELECT t.userid,
COUNT(*) AS numPhotos
FROM [PHOTOS] t
GROUP BY t.userid) p ON p.userid = u.userid
LEFT JOIN (SELECT t.userid,
COUNT(*) AS numGroups
FROM [GROUPS] t
GROUP BY t.userid) g ON g.userid = u.userid
WHERE u.userid = 2
Du måste använda OUTER joins för att detta ska vara i en fråga; INNER-anslutningar för alla tabeller kräver att användaren har minst en post i tabellen FILES, PHOTOS och GROUPS för att vara med i resultatuppsättningen. En OUTER-join innebär att användare med poster i minst en av tabellerna (FILER, FOTO eller GRUPPER) kommer att returneras.
Men JOINs riskerar också att blåsa upp resultatuppsättningen, vilket är problemet som uppstod i den tidigare versionen av mitt svar. Genom att ändra frågan till att använda härledda tabeller/inbäddade vyer för FILES, GROUPS och PHOTOS räkningarna, är problemet löst och det finns inget behov av en GROUP BY utanför de härledda tabellerna/inlinevyerna.