Я делаю запрос, в котором я выбираю все из таблицы, называемой employee, и хочу сделать счет employee_id из двух других таблиц и представлять счет в двух отдельных столбцах.Выберите из одной таблицы с подсчетом из двух других таблиц
Таблицы:
- работника [ID, и т.д.]
- доклад [идентификатор, employee_id и т.д.]
- office_report [идентификатор, employee_id и т.д.]
Что я сделал до сих пор:
SELECT emp.*, COUNT(rep.id) no_of_field_reports, COUNT(of_rep.id) no_of_office_reports
FROM employee emp
LEFT JOIN report rep
ON (emp.id = rep.employee_id)
LEFT JOIN office_report of_rep
ON (emp.id = of_rep.employee_id)
WHERE emp.user_id =7 AND emp.active = 1
GROUP BY emp.id, emp.name
ORDER BY emp.name ASC
Проблема заключается в том, что, как только у меня есть отчеты в таблицах отчетов BOTH, счет испортится. Скажем, у меня есть 16 докладов в таблицы отчетом и 2 в office_report таблицы, счетчик для no_of_field_reports и no_of_office_reports станет 32.
Im отсутствующего что-то очевидно, но я не SQL гения я не могу понять, что.
Пожалуйста, не забудьте объяснить, что является причиной проблемы, поэтому я могу учиться на своих ошибках и лучше разбираюсь в этих типах запросов, поскольку это не будет в последний раз.
Я думаю, ответ будет одинаковым для MariaDB, MySql и SQL в целом, так что я добавил все те бирки ради внимания ..
несколько вариантов. используйте разные значения уникального идентификатора для каждой таблицы или подсчитывайте как встроенный вид. Причина в том, что количество ошибок испортится из-за мощности между таблицами, раздувает подсчеты. – xQbert
@xQbert добавление DISTINCT в мой SELECT не работает. Думаю, я делаю это неправильно .. – DTH