Выборка из двух таблиц

Есть две таблицы со следующим содержанием:
mysql> select * from users;
+----+-------+--------+
| id | name  | phone  |
+----+-------+--------+
|  1 | name1 | phone1 |
|  2 | name2 | phone2 |
+----+-------+--------+
и
mysql> select * from devices;
+---------+---------+-------------+
| user_id | device  | address     |
+---------+---------+-------------+
|       1 | router1 | 192.168.0.1 |
|       1 | router2 | 192.168.1.1 |
|       2 | router1 | 192.168.3.1 |
+---------+---------+-------------+

Нужна выборка из двух таблиц
SELECT id, phone, device, address FROM users,devices...

для получения строки вида:
1,phone1,router1,192.168.0.1,router2,192.168.1.1
  • Вопрос задан
  • 45028 просмотров
Решения вопроса 1
Akint
@Akint
SELECT a.id,a.phone,b.device,b.address FROM users as a,devices as b WHERE a.id = b.user_id;
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Aldorr
@Aldorr
JOIN в помощь
www.mysql.ru/docs/man/JOIN.html
Ответ написан
Комментировать
AGvin
@AGvin
В дополнение к вышеуказанному:

Aldorr скинул ссылку на описание JOIN-ов, но, что бы легче было понять, что это и с чем его едят, советую посмотреть: www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

Akint описал рабочий запрос, но, он не будет выводить пользователей без «девайсов», для выводов таковых, лучше использовать:

SELECT a.id,a.phone,b.device,b.address FROM users AS a LEFT JOIN devices AS b ON a.id = b.user_id;
Ответ написан
Комментировать
@Plague
1. Делать это в запросе не очень правильно, т.к. результат может просто не влезть в ограничение СУБД по размеру строки в ячейке. Поэтому, луче уже в конкретном языке решить проблему циклом и собирать там строки, например в PHP.
2. Иерархические запросы плохо поддерживаются MySQL.
Правда, есть какие-то попытки, можно начинать читать отсюда explainextended.com/2009/03/20/hierarchical-queries-in-mysql-finding-leaves/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы