сложное внутреннее соединение sql

Ты моя последняя надежда. Я потратил весь день, но я не решил, как создать этот запрос.

Это моя текущая диаграмма базы данных

введите здесь описание изображения

Каждое хранилище имеет 1 список

Каждый состав состоит из начальника и рабочего. Информация о них находится в таблице материалов.

Что я пытаюсь сделать? Получить все хранилище (квадратный адрес), имя_работника, фамилию_работника, имя_начальника, фамилию_начальника.

Что у меня есть до сих пор

select storage_address,
storage_square,
 stuffs.stuff_name as chiefSurname, 
stuffs.stuff_surname as chiefName from storages 
inner join storageRoster on storageRoster.storageRoster_id=storages.storage_roster_id 
inner join Chiefs on storageRoster.chief_id = Chiefs.chief_id 
inner join stuffs on Chiefs.chief_stuff_id = stuffs.stuff_id

Но в этом запросе я могу получить начальников только для каждого хранилища. Помогите, пожалуйста. Я в отчаянии.


person Bohdan Savych    schedule 03.04.2016    source источник
comment
внутреннее соединение будет возвращать только совпадения, без данных, это трудно помочь, вы можете попробовать отладку, сохраняя одно соединение за раз   -  person TheGameiswar    schedule 03.04.2016
comment
Вы должны присоединиться к Workers и другим Stuffs (для получения данных Workers) к вашему запросу.   -  person RubioRic    schedule 03.04.2016


Ответы (1)


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

select storage_address,
storage_square,
cs.stuff_name as chiefSurname, 
cs.stuff_surname as chiefName,
ws.stuff_name as workerSurname, 
ws.stuff_surname as workerName 
from storages 
inner join storageRoster on storageRoster.storageRoster_id=storages.storage_roster_id 
inner join Chiefs on storageRoster.chief_id = Chiefs.chief_id 
inner join stuffs cs on Chiefs.chief_stuff_id = cs.stuff_id
inner join Workers on storageRoster.worker_id = Workers.chief_id 
inner join ws cs on Workers.worker_stuff_id = ws.stuff_id
person Zohar Peled    schedule 03.04.2016