SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 03.05.2012 12:24:14

wine-time
Завсегдатай
Зарегистрирован: 17.06.2011
Сообщений: 42

Двойной join по одному параметру

Собственно, опишу 2 таблицы и то, что хочу, чтобы получилось:

таблица 1:
— id
— id_from
— id_to
— text

Таблица 2:
— id
— name

Соответсвенно, поле таблица 1.id_from и таблица 1.id_to есть поля Таблица 2.id

Хочу чтобы выдало:
— id (таблица 1)
— id_from (таблица 1)
— id_to (таблица 1)
— text (таблица 1)
— name_from (Таблица 2, соответствующий для id_from)
— name_to (Таблица 2, соответствующий для id_to)

У меня не получается выбрать для двух полей сразу (name_from и name_to)

Запрос такой:


SELECT
table1.id,
table1.id_to,
table1.id_from,
table1.text,
table2.id as other_id,
table2.name
FROM table1
LEFT JOIN table2 ON table1.id_to = table2.id
 

Как изменить запрос, чтобы помимо name для table1.id_to выбрал name для table1.id_from?
Пробовал добавлять еще один join — без толку.
Надеюсь, нормально описал проблему.

Неактивен

 

#2 03.05.2012 12:31:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Двойной join по одному параметру

SELECT
table1.id,
table1.id_to,
table1.id_from,
table1.text,
table2.name as name_from,
table2.name as name_to
FROM table1
LEFT JOIN table2 ON table1.id_from = table2.id
left join table2 as t3 on table1.id_to = table2.id;

Неактивен

 

#3 03.05.2012 13:58:09

wine-time
Завсегдатай
Зарегистрирован: 17.06.2011
Сообщений: 42

Re: Двойной join по одному параметру

Спасибо.
Только, одинаковое значение в name_from и name_to в выдаче. Как с этим бороться?

Отредактированно wine-time (03.05.2012 14:08:33)

Неактивен

 

#4 03.05.2012 14:08:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Двойной join по одному параметру

Ошибся, нужно t3.name as name_to

Неактивен

 

#5 03.05.2012 14:09:52

wine-time
Завсегдатай
Зарегистрирован: 17.06.2011
Сообщений: 42

Re: Двойной join по одному параметру

Если в таком раскладе, то весь столбец null

Неактивен

 

#6 03.05.2012 14:23:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Двойной join по одному параметру

Или вы что-то путаете, или у вас данные такие

create table tab1(id int, id_from int, id_to int);
create table tab2 (id int, name varchar(100));
insert into tab1 values(1,1,1),(2,1,11),(3,2,1),(4,12,3);
insert into tab2 values(1,'n1'),(2,'n2'),(3,'n3'),(4,'n4');
MariaDB [test]> select * from tab1 left join tab2 on id_from=tab2.id left join tab2 t3 on id_to=t3.id;
+------+---------+-------+------+------+------+------+
| id   | id_from | id_to | id   | name | id   | name |
+------+---------+-------+------+------+------+------+
|    1 |       1 |     1 |    1 | n1   |    1 | n1   |
|    3 |       2 |     1 |    2 | n2   |    1 | n1   |
|    2 |       1 |    11 |    1 | n1   | NULL | NULL |
|    4 |      12 |     3 | NULL | NULL |    3 | n3   |
+------+---------+-------+------+------+------+------+
4 rows in set (0.00 sec)

Неактивен

 

#7 03.05.2012 14:27:33

wine-time
Завсегдатай
Зарегистрирован: 17.06.2011
Сообщений: 42

Re: Двойной join по одному параметру

я параллельно с вами сейчас пробовал по разному составить. в итоге работает такой:


SELECT
table1.id,
table1.id_to,
table1.id_from,
table1.text,
table2.name as name_from,
table_double2.name as name_to
FROM table1
LEFT JOIN table2 ON table1.id_from = table2.id
left join table2 as table2_double on table1.id_to = table2_double.id;


Т.е. везде тогда имя стобца изменяю.
Если как-то иначе, то либо null-столбец, либо идентичный соседу.

Спасибо вам огромное smile Не Дед Мороз приносит радость, а работающие запросы.

Отредактированно wine-time (03.05.2012 14:28:15)

Неактивен

 

Board footer

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