Използвайте:
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
Трябва да използвате OUTER съединения, за да бъде това в една заявка; Вътрешните съединявания за всички таблици ще изискват потребителят да има поне един запис в таблицата FILES, PHOTOS и GROUPS, за да бъде в набора от резултати. ВЪНШНО присъединяване означава, че ще бъдат върнати потребители със записи в поне една от таблиците (ФАЙЛОВЕ, СНИМКИ или ГРУПИ).
Но JOIN също рискуват да надуят набора от резултати, което е проблемът, който възникна в предишната версия на моя отговор. Чрез промяна на заявката за използване на производни таблици/вградени изгледи за броя на ФАЙЛОВЕ, ГРУПИ и СНИМКИ, проблемът е решен и няма нужда от GROUP BY извън извлечените таблици/вградени изгледи.