Как получить данные с 3 таблиц в MySQL? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть 2 таблицы:

1.internal_employee_master

  id    employee_name     unique_id
   1     Noah               ABCD
   2     Liam               ABCD
   3     William            ABCD
   4     Benjamin           ABCD
   5     Jacob              EFGH

2.external_employee_master

  id    name             unique_id
   1    Elijah             ABCD
   2    Ethan              ABCD
   3    Alexander          EFGH

Я использую запрос UNION для получения данных обеих таблиц водну таблицу и отобразить эти данные в HTML-таблицу.

select id
     , employee_name
     , unique_id
  from internal_employee_master
 where unique_id = 'ABCD'
union
select id
     , employee_name
     , unique_id
  from external_employee_master
 where unique_id = 'ABCD'

Я хочу сохранить списки зарплат обоих сотрудников в одной таблице.У меня есть одна таблица payslips со столбцами emp_id и emp_type.

Я храню данные в payslips данных, таких как:

   id     pay_slip        emp_id  emp_type
   1   Noah_payslip.pdf    1     internal
   2   Liam_payslip.pdf    2     internal
   3   Lia_payslip.pdf     1     External

, как вы можете видетьВ приведенной выше таблице я храню emp_id и emp_type обеих таблиц в отдельных столбцах каждый.

Теперь я не понимаю, как разделить данные внутреннего сотрудника и внешнего сотрудника из таблицы pay_slip и показатьданные в таблице html.

В настоящее время я пишу ниже объединений sql, чтобы получить employee_names внутренних и внешних таблиц сотрудников, но это не работает для меня.

$id = $_GET['id];
SELECT ps.id,ps.pdf,ps.emp_id,ps.emp_type,external_employee.name as comemp,
internal_employee.comp_empl_name as comemp
FROM pay_slip as  ps 
INNER JOIN internal_employee_master as internal_employee ON internal_employee.comp_trad_id = ps.trade_id 
INNER JOIN external_employee_master as external_employee ON external_employee.trad_id = ps.trade_id
where ps.is_deleted = 1 AND ps.id = '".$id."'"

Пожалуйстапомогите мне присоединиться к запросу, чтобы получить name и employee_name относительно emp_type формы pay_slip таблицы.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете попробовать это

SELECT ps.id, ps.pay_slip, ps.emp_type, COALESCE(i.employee_name, e.name) AS name 
FROM payslips ps 
LEFT JOIN internal_employee_master i ON i.id = ps.emp_id AND ps.emp_type = 'internal'
LEFT JOIN external_employee_master e ON e.id = ps.emp_id AND ps.emp_type = 'External' 
AND ps.id = :ID

Вы можете увидеть это в действии здесь http://sqlfiddle.com/#!9/53a195/7/0

Я бы отметил, что в ваших включенных таблицах и запросах есть ряд проблем.Например, неправильные имена столбцов между таблицами (name вместо employee_name), вы пропустили столбец is_deleted в своей примерной схеме, и у вас есть заглавные и некапитализированные значения в столбце emp_type, что сбивает с толку.

0 голосов
/ 17 февраля 2019

Как насчет использования UNION снова?

SELECT 
    ps.id,
    ps.pdf,
    ps.emp_id,
    ps.emp_type,
    external_employee.name AS comemp,
    internal_employee.comp_empl_name AS comemp
FROM
    pay_slip AS ps
        INNER JOIN
    internal_employee_master AS internal_employee ON internal_employee.comp_trad_id = ps.trade_id
WHERE
    ps.is_deleted = 1 AND ps.id = '".$id."'
        AND ps.type = 'internal' 
UNION ALL 
SELECT 
    ps.id,
    ps.pdf,
    ps.emp_id,
    ps.emp_type,
    external_employee.name AS comemp,
    internal_employee.comp_empl_name AS comemp
FROM
    pay_slip AS ps
        INNER JOIN
    external_employee_master AS external_employee ON external_employee.trad_id = ps.trade_id
WHERE
    ps.is_deleted = 1 AND ps.id = '".$id."'
        AND ps.type = 'external'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...