Как в одном запросе получить количество записей по параметрам из разных таблиц?

270
11 сентября 2017, 04:23

У меня есть 3 таблицы. Первая таблица это: packs_global_cats В ней есть 3 глобальные категории. Каждая из глобальных категорий имеет свои субкатегории. Таблица с субкатегориями называется: packs_cats. Вот ее структура:

id
global_cat
name

Третья таблица это сами пакеты. Вот их структура:

id cat name

Вопрос.

Как мне посчитать количество субкатегорий, для конкретной глобальной категории, в которой есть пакеты? Начало запроса у меня такое:

"SELECT COUNT(*) FROM packs_cats WHERE global_cat = '$global_cats[id]'"

Данный запрос просто посчитает сколько есть субкатегорий для одной глобальной, но этот запрос не зайдет в таблицу с пакетами и не проверит существуют ли в этих субкатегориях пакеты.

Нужно как то с помощью LEFT JOIN, но я к сожалению не понимаю как. Помогите пожалуйста

Answer 1

Вариант навскидку (возможно, не самый оптимальный по скорости):

SELECT COUNT(DISTINCT c.id)
FROM packs_cats AS c
JOIN packs AS p ON c.id = p.cat
WHERE c.global_cat = <global_cat_id>

– здесь вместо <global_cat_id> нужно подставить ID глобальной категории.

P.S.: Нужен именно JOIN, а не LEFT JOIN, потому что LEFT JOIN выберет все категории – даже те, в которых нет пакетов.

READ ALSO
Как растягивать GridBagLayout как это делает BorderLayout и GridLayout?

Как растягивать GridBagLayout как это делает BorderLayout и GridLayout?

Есть таблица из связки JLabel/JButton и JText, с помощью Grid'a задал им нужные пропорции, но при растяжении окна размеры (масштаб) компонентов не меняетсяКак...

318
Сохранение через FileChooser

Сохранение через FileChooser

Всем добрый день, я хочу чтобы пользователь выбирал где сохранять файл сам через FileChooser в JavaFX, но когда он выбирает директорию например D:\File\...

318
Передача данных из базы SQLite в Recyclerview

Передача данных из базы SQLite в Recyclerview

Всем приветС sqlite работаю недавно

254
Вывод из HashMap

Вывод из HashMap

Возможно ли вывести значение из id, damage или count?

287