Сложный запрос в SQL

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

Нужно сделать запрос, который собирает данные об установленном ПО к каждом кабинете. Пока есть только один стабильно работающий запрос по этой теме:

SELECT software.*, licenses.name as 'l_name', licenses.doc_num 
FROM software
LEFT JOIN licenses
ON software.license_id = licenses.id

Как сделать такой же запрос, только еще с привязкой к кабинету?


Ответы (3 шт):

Автор решения: Aziz Umarov

В данной схеме не получиться узнать, то что вы хотите. У Вас нет связи между cabinets и software. Вы можете сделать cross join, но это умножение всех на все.

Вам нужно добавить таблицу

CabinetSoftware (id, cabinet_id, sowtware_id)

и будет всё хорошо

→ Ссылка
Автор решения: HasmikGaryaka

Чтобы связать cabinets и software нужно поле. Добавьте в таблицу software поле cabinet_id. Если у каждого софта есть своя лицензия, то можно удалить licenses перенеся все поля оттуда в software.

→ Ссылка
Автор решения: Sergey

Элементарно:

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

Почему-то лицензии догадались включить в запрос, а остальное по аналогии не догадались. Даже не смотря на схему с линиями связи.

→ Ссылка