powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select 2х внешних ключей на один общий PK при их разном значении
3 сообщений из 3, страница 1 из 1
select 2х внешних ключей на один общий PK при их разном значении
    #39431940
peacemaker6
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Столкнулся с такой проблемой. есть таблица 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
select 2х внешних ключей на один общий PK при их разном значении
    #39431960
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два поля ИДов для подстановки требуют двух копий таблицы для выполнения подстановки. Каждая копия используется для подстановки по одному из двух полей.

Код: 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
select 2х внешних ключей на один общий PK при их разном значении
    #39431964
peacemaker6
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select 2х внешних ключей на один общий PK при их разном значении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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