SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.12.2011 14:39:07

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Два JOINа одной и той же таблицы

Всем привет!
У меня имеется таблица фирм (`firms`) и таблица менеджеров (`managers`)
У каждой фирмы может быть 2 менеджера `firms`.`manager_1` и `firms`.`manager_2`
Необходимо выбрать фирмы с именами менеджеров. Делаю так:


SELECT `firms`.`company_name`, `managers_1`.`manager_1_name`, `managers_2`.`manager_2_name`
FROM `firms`
LEFT JOIN `managers` AS `managers_1` ON (`firms`.`manager_1` = `managers_1`.`id`)
LEFT JOIN `managers` AS `managers_2` ON (`firms`.`manager_2` = `managers_2`.`id`)
 


Работает правильно, но имеются подозрения, что это можно сделать как-то более элегантноsmile
Что скажете?

p.s. О том, что следовало бы сделать связующую таблицу firms_managers с полями id | firm_id | manager_id знаю. Хотелось бы узнать как изменить запрос при хранении id менеджеров в двух столбцах таблицы firms

Отредактированно tazododu (15.12.2011 14:40:25)

Неактивен

 

#2 15.12.2011 14:57:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Два JOINа одной и той же таблицы

А вот так если?

SELECT `f`.`company_name`, `m`.`*` FROM `firms` f INNER JOIN `managers`m ON (`f`.`manager_1` = `m`.`id` or `f`.`manager_2` = `m`.`id`);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 15.12.2011 19:10:32

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Re: Два JOINа одной и той же таблицы

deadka написал:

А вот так если?

SELECT `f`.`company_name`, `m`.`*` FROM `firms` f INNER JOIN `managers`m ON (`f`.`manager_1` = `m`.`id` or `f`.`manager_2` = `m`.`id`);

таким образом у меня каждая фирма извлекается по 2 раза. а нужно одной записью

Неактивен

 

#4 17.12.2011 19:14:47

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Два JOINа одной и той же таблицы

В таком случае без двух джоинов не обойтись.
Но если у Вас в `managers_1` или в `managers_2` найдётся более одной записи, то данные фирмы также будут возвращены более одного раза smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson