1

Тема: Создание запроса для выбора данных из нескольких таблиц по общему полю

Всем привет, перехожу к описанию проблемы.

Есть одна база, в ней - несколько таблиц.

есть таблица юзеры с полями: имя, телефон, почта,
есть таблица телефоны с полями: имя, серийник, модель, марка
поле имя - в каждой таблице, попадаются одинаковые,
допустим есть юзер вася иванов. он фигурирует как в первой так и во 2й таблице,

  только в первой сказано что вот вася иванов у него телефон 222 и почта вася@рамблер. ру,
  а во 2-й сказано что у васи телефон нокия модель 1101 с серийником хххх
  задача стоит следующая: вывести ВСЕ данные по этому васе иванову.



Помогие сформировать запрос для выполнения этого действия. Также хочу сказать что оператор Union здесь не проходит, т.к. все таблицы имеют разное количество полей. Заранее большое спасибо

2

Re: Создание запроса для выбора данных из нескольких таблиц по общему полю

Примерно так:

SELECT *
FROM `user` INNER JOIN `phone` ON `user`.`name` = `phone`.`name`;

При пересечении имен полей в таблицах, может понадобиться задание алиасов, чтобы они были уникальными.

3

Re: Создание запроса для выбора данных из нескольких таблиц по общему полю

Hanut сказал:

Примерно так:

SELECT *
FROM `user` INNER JOIN `phone` ON `user`.`name` = `phone`.`name`;

При пересечении имен полей в таблицах, может понадобиться задание алиасов, чтобы они были уникальными.

Этот запрос выдает всех юзеров, которые совпадают по полю name.

Мне не совсем понятно зачем ставить оператор INNER JOIN

этот запрос можно было сформировать и вот так.
SELECT *
FROM impresoras, telephones WHERE impresoras.name=telephones.name


кроме того, как можно преобразовать этот запрос только по указанному юзеру, например:
SELECT *
FROM `user` INNER JOIN `phone` ON `user`.`name` = `phone`.`name`=`имя_юзера`

??


и как сделать такой же запрос где 3 и больше таблиц, например еще таблица
pc с 6-ю полями и таблица printers?

4

Re: Создание запроса для выбора данных из нескольких таблиц по общему полю

valerii
Совершенно верно, это обычное объединение таблиц. Оба вариант совершенно равнозначны.

SELECT *
FROM `user` INNER JOIN `phone` ON `user`.`name` = `phone`.`name`
WHERE `user`.`name` = 'имя_юзера';

В случае, если поле name является уникальным то объединить по нему можно любое количество таблиц, примерно так:

SELECT *
FROM `user` INNER JOIN (`phone`, `pc`) ON (`user`.`name` = `phone`.`name` AND `user`.`name` = `pc`.`name`)
WHERE `user`.`name` = 'имя_юзера';

Однако обычно для объединения используется первичный ключ (primary key), поле id, например.