Если я правильно понимаю ваш вопрос со ссылкой на ваш фактический раздел кода, вам нужен список пользователей с тем, сколько у них блогов и сколько комментариев. Теперь, если вы хотите посчитать одну таблицу соответствия, вы можете просто сделать это:
SELECT
U.NAME
,COUNT(1) AS BLOG_COUNT
FROM USERS U
LEFT JOIN BLOGS B
ON B.USER_ID = U.ID
GROUP BY U.NAME
Но так как вы хотите сосчитать две таблицы, вы должны сделать это немного по-другому. Есть несколько способов сделать это, но мне нравится то, что мне нравится:
SELECT
U.NAME
,B.BB_COUNT AS BLOG_COUNT
,C.CC_COUNT AS COMMENT_COUNT
FROM USERS U
LEFT JOIN
(
SELECT
BB.USER_ID
,COUNT(1) AS BB_COUNT
FROM BLOGS BB
GROUP BY BB.USER_ID
) B
ON B.USER_ID = U.ID
LEFT JOIN
(
SELECT
CC.USER_ID
,COUNT(1) AS CC_COUNT
FROM COMMENTS CC
GROUP BY CC.USER_ID
) C
ON C.USER_ID = U.ID
Это может быть или не быть самым эффективным способом, но по моему опыту это работает довольно хорошо, и его легко понять. Все зависит от количества строк в таблицах и индексах и т. Д. c. Обычно идея состоит в том, чтобы сузить возвращаемые строки как можно быстрее. В этом случае у вас будет два подзапроса, но в итоге у них будет только столько строк, сколько у вас пользователей.
Еще одна вещь, которую нужно отметить, это вернет всех пользователей, точка. Это может быть не то, что вы хотите. Вы можете хотеть только подмножество пользователей. Если это так, этот внутренний выбор может быть не самым эффективным, потому что вы делаете расчеты для пользователей, которые могут не быть в конечном результате, тратя впустую время. Однако я могу сойти с топи c.