Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
select 2х внешних ключей на один общий PK при их разном значении
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Столкнулся с такой проблемой. есть таблица 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 почему-то должны быть одинаковыми. Как это можно поправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 12:22 |
|
||
|
select 2х внешних ключей на один общий PK при их разном значении
|
|||
|---|---|---|---|
|
#18+
Два поля ИДов для подстановки требуют двух копий таблицы для выполнения подстановки. Каждая копия используется для подстановки по одному из двух полей. Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 12:55 |
|
||
|
select 2х внешних ключей на один общий PK при их разном значении
|
|||
|---|---|---|---|
|
#18+
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`; Тему можно закрыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 13:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39431960&tid=1830788]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 336ms |

| 0 / 0 |
