Сложный запрос в SQL
Уже третий день сижу пытаюсь сочинить запрос на SQL. Есть у меня вот такая схема данных:

Нужно сделать запрос, который собирает данные об установленном ПО к каждом кабинете. Пока есть только один стабильно работающий запрос по этой теме:
SELECT software.*, licenses.name as 'l_name', licenses.doc_num
FROM software
LEFT JOIN licenses
ON software.license_id = licenses.id
Как сделать такой же запрос, только еще с привязкой к кабинету?
Ответы (3 шт):
В данной схеме не получиться узнать, то что вы хотите. У Вас нет связи между cabinets и software. Вы можете сделать cross join, но это умножение всех на все.
Вам нужно добавить таблицу
CabinetSoftware (id, cabinet_id, sowtware_id)
и будет всё хорошо
Чтобы связать cabinets и software нужно поле. Добавьте в таблицу software поле cabinet_id. Если у каждого софта есть своя лицензия, то можно удалить licenses перенеся все поля оттуда в software.
Элементарно:
SELECT c.name, s.*, l.name as 'l_name', l.doc_num
FROM software s
LEFT JOIN licenses l ON s.license_id = l.id
JOIN workplace_software ws ON ws.software_id = s.id
JOIN workplaces w ON w.id = ws.workplace_id
JOIN cabinet_workplaces cw ON cw.workplace_id = w.id
JOIN cabinets c ON c.id = cw.cabinet_id
ORDER BY c.name
Почему-то лицензии догадались включить в запрос, а остальное по аналогии не догадались. Даже не смотря на схему с линиями связи.