Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Вывод полей из разных таблиц в одну


Автор: Striderr 20.11.2009, 13:40
Всем доброго времени суток.

Имеется БД из нескольких таблиц. Также имеется приложение, позволяющее заносить данные в эти таблицы. И требуется в этом приложении к примеру в одном из DBGrid'ов вывести поля из разных таблиц.
Каким образом это можно сделать через IBQuery? Для конекта с базой гриды используют IBTable и DataSource соотвественно. 

Автор: mrbrooks 20.11.2009, 13:58
Цитата(Striderr @  20.11.2009,  13:40 Найти цитируемый пост)
Каким образом это можно сделать через IBQuery? 

Соответствующим sql-запросом. Здесь стоит уточнить как именно таблицы связаны друг с  другом.

Автор: Striderr 20.11.2009, 17:20
Уточнить каким образом? Сами таблицы в программе между собой связать? 

Автор: chip_and_dayl 20.11.2009, 17:50
Таблицы объединяешь через запрос такого плана:

Код

select * from Таблица1
inner join Таблица2 on Таблица1.Поле_с_помощью_какого_идет_связывание=Таблица2.Поле_с_помощью_какого_идет_связывание

Автор: Striderr 20.11.2009, 19:07
Большое спасибо за запрос!

Правда я тут покопался немного и нашел немного другой вариант объединения
Код

select таблица_1.требуемая_запись, таблица_2.требуемая_запись
from таблица_1, таблица_2
where таблица_2.внешний_ключ = таблица_1.первичный_ключ
  


Автор: chip_and_dayl 20.11.2009, 22:26
Striderr
Я тоже начинал объединение через where :) Но сейчас пользуюсь join

Автор: Striderr 21.11.2009, 08:35
Ну да, начинать с where определенно легче=) 
А какие преимущества у join? Просто в данном случае мне просто надо было вывести в один DBGrid определенные поля из 3-х таблиц. А в случае с join приходилось бы лишние поля скрывать, так как таблицы выводились со всеми полями. Или я еще плохо знаю этот самый join:)

Автор: chip_and_dayl 21.11.2009, 10:38
Преимущества в принципе как таково нету, разве что, когда объединяешь больше двух таблиц, то очень сложно будет читаться запрос когда будет куча AND.  Это в том случае если ты делаешь внутренне объединение (когда выводятся запись на которую имеется ссылка в первой и второй таблице (если взять за пример объединение двух таблиц)).

Но может возникнуть такая ситуация, что тебе нужно с первой таблицы вывести все записи, даже если во второй таблице на них нету ссылки. Если ты использовал обьединение через where,  то  тебе нужно будет полностью переписать запрос с использованием оператора left|right outer join, в случае с inner join тебе нужно просто заменить inner join на left|right outer join и все заработает:)

Автор: Striderr 21.11.2009, 17:48
Вон оно че) 
Спасибо, буду знать теперь)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)