Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select 2х внешних ключей на один общий PK при их разном значении / 3 сообщений из 3, страница 1 из 1
03.04.2017, 12:22
    #39431940
peacemaker6
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select 2х внешних ключей на один общий PK при их разном значении
Доброго времени суток. Столкнулся с такой проблемой. есть таблица EMPLOYEES, в которой содержатся данные сотрудника

+-------------+--------------------+
| employee_id | employee_last_name |
+-------------+--------------------+
| 3 | Тихонов
| 11 | Берченко
| 12 | Сорокин
+-------------+--------------------+

Есть таблица, в которой записана работа этих сотрудников. Причем принять в работу оборудование может один сотрудник (employee_id_begin), а выполнить другой (employee_id_end).

create table works(
....
employee_id_begin int(8) not null,
begin_time DATETIME not null,
....
employee_id_end int(8) not null,
end_time DATETIME not null,
....
foreign key (employee_id_begin) references employees(employee_id),
foreign key (employee_id_end) references employees(employee_id),
foreign key (login_id) references client_login(login_id))
CHARACTER SET utf8 COLLATE utf8_general_ci;


При выборке сделанной работы столкнулся с такой проблемой.

Обычный запрос
select work_id,login_id,employee_id_begin,employee_id_end from works;
Возвращается все (в данный момент 5) записей.

+---------+----------+-------------------+-----------------+
| work_id | login_id | employee_id_begin | employee_id_end |
+---------+----------+-------------------+-----------------+
| 1 | 3 | 11 | 11 |
| 2 | 10 | 11 | 11 |
| 3 | 15 | 3 | 3 |
| 4 | 10 | 11 | 11 |
| 5 | 5 | 3 | 12 |
+---------+----------+-------------------+-----------------+

После того как заменяю ID сотрудников на их фамилии из таблицы EMPLOYEES.

select work_id,login_id,employee_last_name,employee_last_name from works,employees
WHERE works.employee_id_begin=employees.employee_id
AND works.employee_id_end=employees.employee_id;

получаю только 4 записи:

+---------+----------+--------------------+--------------------+
| work_id | login_id | employee_last_name | employee_last_name |
+---------+----------+--------------------+--------------------+
| 3 | 15 | Тихонов | Тихонов
| 1 | 3 | Берченко | Берченко

| 2 | 10 | Берченко | Берченко

| 4 | 10 | Берченко | Берченко

+---------+----------+--------------------+--------------------+


UPD. Так же 4 записи возвращает запрос
select work_id,login_id,employee_id_begin,employee_id_end from works,employees
WHERE works.employee_id_begin=employees.employee_id
AND works.employee_id_end=employees.employee_id;
без замены на фамилии.

Т.е. проблема где-то в условии. Считается что employee_id_begin и employee_id_end почему-то должны быть одинаковыми.
Как это можно поправить?
...
Рейтинг: 0 / 0
03.04.2017, 12:55
    #39431960
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select 2х внешних ключей на один общий PK при их разном значении
Два поля ИДов для подстановки требуют двух копий таблицы для выполнения подстановки. Каждая копия используется для подстановки по одному из двух полей.

Код: sql
1.
2.
3.
4.
SELECT t0.*, t1.name, t2.name
FROM maintable t0
JOIN slavetable t1 ON t0.field1 = t1.id
JOIN slavetable t2 ON t0.field2 = t2.id
...
Рейтинг: 0 / 0
03.04.2017, 13:00
    #39431964
peacemaker6
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select 2х внешних ключей на один общий PK при их разном значении
Akina, благодарю за ответ. Как раз разобрался с JOIN'ами.

В итоге все работает:
select work_id,`c`.login_name,begin_time,work_status,trouble,solution, `e2`.employee_last_name,`e`.employee_last_name from `works` `w` INNER JOIN `employees` `e` ON `w`.`employee_id_end`=`e`.`employee_id` INNER JOIN `employees` `e2` ON `w`.`employee_id_begin`=`e2`.`employee_id` INNER JOIN `client_login` `c` ON `w`.`login_id`=`c`.`login_id`;

Тему можно закрыть.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select 2х внешних ключей на один общий PK при их разном значении / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]