SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 02.11.2011 16:12:16

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Многотабличный запрос и JOIN

Здравствуйте,
как сделать запрос с выборкой из трёх таблиц, две таблицы сравниваются по id а третия через JOIN.
Вообще мне нужно делать выборку по tb и tb2 а в tb_extra дополнительные сведения о записи и это скорее всего нужно делать с JOIN?
что то типа

SELECT * FROM tb LEFT JOIN tb_extra USING(id)  
WHERE ...
только как вторую прикрутить не знаю чтоб работало

tb
------------------
id  name
1
2
3

tb2
-----------------
id  name
1
2

tb_extra
-----------------
1
3

Неактивен

 

#2 02.11.2011 16:42:50

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

Re: Многотабличный запрос и JOIN

SELECT * FROM tb LEFT JOIN tb2 on tb.id=tb2.id LEFT JOIN tb_extra ON tb.id=tb_extra.id


?


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

Неактивен

 

#3 03.11.2011 09:02:25

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Многотабличный запрос и JOIN

Спасибо.. но немного не так
выводится всё что есть в tb не смотря на то что tb2 меньше... )

Неактивен

 

#4 03.11.2011 10:09:15

Viron
Участник
Зарегистрирован: 06.12.2010
Сообщений: 3

Re: Многотабличный запрос и JOIN

Ну тогда

SELECT * FROM tb2 LEFT JOIN tb on tb.id=tb2.id LEFT JOIN tb_extra ON tb.id=tb_extra.id
или
SELECT * FROM tb LEFT JOIN tb2 on tb.id=tb2.id LEFT JOIN tb_extra ON tb.id=tb_extra.id WHERE tb.id != NULL
, если не ошибаюсь

Неактивен

 

#5 03.11.2011 13:34:10

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

Re: Многотабличный запрос и JOIN

Код:

mysql> create table t_4886_tb(id int,name varchar(80));
Query OK, 0 rows affected (2.03 sec)

mysql> create table t_4886_tb2(id int,name varchar(80));
Query OK, 0 rows affected (0.04 sec)

mysql> create table t_4886_tb_extra(id int,name varchar(80));
Query OK, 0 rows affected (1.58 sec)

mysql> insert into t_4886_tb values(1,'1'),(2,'2'),(3,'3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t_4886_tb2 values(1,'1'),(2,'2');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> insert into t_4886_tb_extra values(1,'1'),(3,'3');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select tb.*,tb2.*,tb_extra.* from t_4886_tb tb join t_4886_tb2 tb2 using(id) left join t_4886_tb_extra tb_extra using(id);
+------+------+------+------+------+------+
| id   | name | id   | name | id   | name |
+------+------+------+------+------+------+
|    1 | 1    |    1 | 1    |    1 | 1    |
|    2 | 2    |    2 | 2    | NULL | NULL |
+------+------+------+------+------+------+
2 rows in set (0.00 sec)

Если не подходит, то приведите пример выборки, которую Вы хотите получить.


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

Неактивен

 

Board footer

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