SQL подсчёт количества связанных записей

416
22 июня 2017, 04:08
Подсчёт связанных записей

Доброго времени суток! Использую СУБД MySQL в связке с PhpMyAdmin, при создании связей между таблицами появился вопрос: "Можно ли получить количество записей в других таблицах, связанных с некоторой записью используя лишь sql".

Пример

Предположим у нас три таблицы: Авторы, Книги и Журналы. Авторы-Книги (1:М), Авторы-Журналы (1:М). В таблице Авторы есть некий Иванов, с котором имеется 10 записей в таблице Журналы и 3 записи в таблице Книги.
Возможно ли получить количество связных записей с господином Ивановым? (их 13 = 10 журналов + 3 Книги)
При том что, количество таблиц не известно, результат необходимо получить с помощью языка SQL, без использования триггеров и т.п.

Answer 1
Шаблон:
SELECT main.id
     , COUNT(DISTINCT slave1.id) count1
     , COUNT(DISTINCT slave2.id) count2 
  /* , ... */
FROM main
/* some */ JOIN slave1 ON main.joinfield1 = slave1.joinfield1
/* some */ JOIN slave2 ON main.joinfield2 = slave1.joinfield2
/* ... */ 

Если нужно ещё и общее количество - то можно сложить соответствующие COUNT-ы. А если нужно только общее количество - лучше в подзапросах получить COUNT по каждой отдельной таблице в отдельном подзапросе, и только потом суммировать.

READ ALSO
MySQL. Выборка записей [дубликат]

MySQL. Выборка записей [дубликат]

Данный вопрос уже был задан и имеет решение:

228
Смена кодировки MySQL с latin1 на UTF-8

Смена кодировки MySQL с latin1 на UTF-8

Развернут apache и MySQL на Ubuntu 1404LTS

223
как вставить новые данные в products_id где user_id = n

как вставить новые данные в products_id где user_id = n

нужно,что бы добавлялись новые id продукта у определенного пользователя

209
Как добавить webapp-директорию в уже существующее приложение maven (IntelliJ IDEA)?

Как добавить webapp-директорию в уже существующее приложение maven (IntelliJ IDEA)?

Как можно добавить webapp-директорию (с особым значком) в проект IntelliJ IDEA, если это не было сделано путём выбора архетипа при создании проекта?

381