MySQL: COUNT () из нескольких таблиц - PullRequest
0 голосов
/ 31 января 2019

У меня есть 3 таблицы user, person и company.
user_id - это foreign key в таблицах person и company.
что я хочу сделатьчтобы подсчитать, сколько людей и компаний связано с каждым пользователем, поэтому я выполнил следующий запрос:

select u.id , u.username, count(c.user_id) as count_company, count(p.user_id) as count_people
from user u left join company c on (u.id = c.user_id)
left join person p on (u.id = p.user_id)
group by u.id, u.username

но я получаю неправильный результат !!
Это результат, который яполучить:
enter image description here

однако, когда я пытаюсь подсчитать только компании, связанные с каждым пользователем, используя этот запрос:

select u.id , u.username, count(c.staff_user_id) as count_company
from fos_user u left join company c on (u.id = c.staff_user_id)
group by u.id, u.username

Я получаю этот результат:
enter image description here
что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Если пользователь относится к нескольким компаниям и / или нескольким лицам, то вы всегда учитываете перекрестное объединение из них - то есть количество компаний, умноженное на количество людей.

Чтобы решить эту проблему (в вашем случае), я бы просто использовал подзапросы:

select u.id, u.username, 
    (select count(*) from company c where u.id = c.user_id) as count_company,
    (select count(*) from person p  where u.id = p.user_id) as count_people
from user u

Обратите внимание, что двойное соединение, как в вашем запросе, с реляционной точки зрения (в большинстве случаев) просто неверно.

0 голосов
/ 31 января 2019

кажется, что вам нужно отличное число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...