Получить данные из 4 таблиц, которые имеют общее поле - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть эта структура,

таблицы

employees

id

name
_______________________
entrance

id_employees

day

hour
_______________________
break

id_employees

day

hour
_______________________
break_end

id_employees

day

hour
_______________________
exit

id_employees

day

hour

Так что мне нужно перечислить регистр для каждого сотрудника, где «id_employees» равно «id» таблицы сотрудников, мне удалосьсделать это на двух таблицах, но ничего не работает, чтобы связать их всех, есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Наиболее вероятное решение - через левое соединение, хотя вам может потребоваться псевдоним общих имен столбцов, чтобы различать их.Основой запроса для этого будет:

SELECT e.*,b.*,be.*,e.* FROM employees e
LEFT JOIN break b ON e.id = b.id_employees
LEFT JOIN break_end br ON e.id = b.id_employees
LEFT JOIN exit ON e.id = id_employees

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

вроде:

SELECT e.id, 
       b.day as break_day, 
       b.hour as break_hour, 
       br.day as break_end_day, 
       br.hour as break_end_hour, 
       ...

и т. Д.

0 голосов
/ 29 апреля 2019

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

SELECT e.id, e.name, 
       ee.day AS entrance_day, ee.hour AS entrance_hour,
       b.day AS break_day, b.hour AS break_hour,
       be.day AS break_end_day, be.hour AS break_end_hour,
       ex.day AS exit_day, ex.hour AS exit_hour
FROM employees e
LEFT JOIN entrance ee ON ee.id_employees = e.id
LEFT JOIN break b ON b.id_employees = e.id
LEFT JOIN break_end be ON be.id_employees = e.id
LEFT JOIN exit ex ON ex.id_employees = e.id

Обратите внимание, что вам нужно использовать LEFT JOIN на случай, если у сотрудника нет перерыва в определенный день. Использование INNER JOIN в этом случае приведет к отсутствию строки в выводе для этих сотрудников.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...