Вопрос № 62233: Уважаемые эксперты! Подскажите, пожалуйста, как создать запрос в Database Desktop, если необходимо вывести некоторые поля не из одной таблицы базы, а из нескольких? Заранее благодарна!...
Вопрос № 62.233
Уважаемые эксперты! Подскажите, пожалуйста, как создать запрос в Database Desktop, если необходимо вывести некоторые поля не из одной таблицы базы, а из нескольких? Заранее благодарна!
Отправлен: 11.11.2006, 22:25
Вопрос задала: Zinaida (статус: 1-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Grigory
Здравствуйте, Zinaida!
Для таких вещей обычно используется ОБЪЕДИНЕНИЕ - JOIN. Подробно об этом можно почитать вот тут:
http://sqlcourse2.com/joins.html
http://www.w3schools.com/sql/sql_join.asp
http://doc.mpv.ru/PostgreSQL7.1.3/sql-language.html
Удачи!
Ответ отправил: Grigory (статус: 4-ый класс)
Ответ отправлен: 12.11.2006, 04:00 Оценка за ответ: 5
Отвечает: Игорь Елизаров
Здравствуйте, Zinaida!
Связывание в разных SQL немного отличаются, но принцип один.
таблицы связываются между собой и выбираются как из одной, так и из другой таблицы.
Типичный пример - в таблице хранятся коды из справочника, а при запросе эти значения заменяются значением из соответствующего справочника.
Вот пример
таблца user имеет поле user_id - код юзера из справочника и содержит дату последней работы.
справочник юзеров spr_user содержит нахвание пользователя
Для того, чтобы вывести имя пользователя и дату его работы можно выполнить следующий запрос (MS SQL )
select user.date1, spr_user.name
from user inner join spr_user on user.user_id = spr_user.id
В MySQL запрос будет выглядеть чуть иначе но суть примерно та же:
select user.date1, spr_user.name
from user, spr_user // перечисляются все таблицы, учавствующие в запросе
where on user.user_id = spr_user.id // и их отношения
очень желательно, особенно для справочников, связывать таблицы по неповторяющемуся индексу, иначе можете иногда получить дублирующиеся записи и найти их будет довольно тяжело (ошибка будет иногда появляться, а иногда - нет, так называемая плавающая ошибка)
С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 7-ой класс)
Ответ отправлен: 12.11.2006, 19:05 Оценка за ответ: 5
Отвечает: PaVeL_Ekt
Здравствуйте, Zinaida!
Собственно говоря, если нужно выводить не связанные значения то
select a.a1, a.a2, b.b1, b.b2 from Table_1 a, Table_2 b
А если таблицы нужно связать тогда нужно использовать Join
Select a.a1, a.a2, b.b2, c.c2, d.d2 from Table_1 a
Inner join Table_2 b on b.b1=a.a1 // Равнозначные таблицы
Left join Table_3 c on c.c1=a.a1 // Главная левая таблица
Right join Table_4 d on d.d1=a.a1 // Главная правая таблица
Если использовать inner тогда если в одной из таблиц нет записи, которая есть в другой то запись выводиться не будет.
При главенстве одной из таблиц: Если в главной таблице запись есть, а в другой нет, тогда запись выведеться, но поле подчиненной таблицы будет равняться NULL
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 13.11.2006, 08:09 Оценка за ответ: 5