Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 22:55   #1
BattlePingvin
 
Регистрация: 14.10.2011
Сообщений: 4
По умолчанию Запрос для вывода таблицы в DBGrid

Помогите пожалуйста доработать запрос, надо вывести таблицу в DBGrid.
Поля таблицы:
Код спектакля
Название спектакля
Автор
Жанр
Тип спектакля
Бюджет спектакля
Режиссер постановщик
Художник постановщик
Дирижер постановщик

Проблема с получением данных из трёх последних полей - постановщики, все три поля связанны с одним кодом из другой таблице - Код работника который находится в таблице Работники, и надо выводить не значение кода, а ФИО из таблицы Работники которое соответствует этому значению, подскажите как это можно реализовать в одном запросе ?
Вот мой код на получения данных из остальных полей:
Код:
SELECT Спектакли.[Название спектакля], Авторы.ФИО AS Автор, Жанры.Жанр, Спектакли.[Театр первой постановки], Спектакли.[Год первой постановки], Спектакли.[Бюджет спектакля], [Типы спектаклей].[Тип спектакля]
FROM Авторы INNER JOIN ([Типы спектаклей] INNER JOIN (Жанры INNER JOIN Спектакли ON Жанры.[Код жанра]=Спектакли.Жанр) ON [Типы спектаклей].[Код типа]=Спектакли.[Тип спектакля]) ON Авторы.[Код автора]=Спектакли.Автор;
BattlePingvin вне форума Ответить с цитированием
Старый 14.02.2012, 11:11   #2
mansuetudo
Пользователь
 
Регистрация: 08.11.2011
Сообщений: 46
По умолчанию

Т.е. в этих полях стоят коды работника? Тогда я бы писала что-то вроде
Код:
select k.[ФИО работника] 
from Работники k, <имя таблицы с кодами режиссёра, художника, дирижёра> t
where t.[код работника]=k.[код работника]
Кстати, выборку из других таблиц я предлагаю тоже делать аналогичным образом, т.е. определить, по каким полям таблицы между собой связаны, и по ним составлять условие и таким образом всё увязать в один запрос. Если бы вы описали структуру таблиц, было бы легче дать конкретный ответ.
mansuetudo вне форума Ответить с цитированием
Старый 14.02.2012, 12:09   #3
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Автор темы явно лукавит. Не вызывало же у него затруднений при объединении таблиц Автор, Жанр, Тип...
Хотя, если речь о проблеме с одной и той же таблицей для объединения из разных ее строк, то проблема решается алиасами (псевдонимами) таблицы Работники.
Типа: Работники as Реж JOIN ... Реж.ФИО ... Работники Худ JOIN ... Худ.ФИО... и т.д.

PS. 2 mansuetudo. Неявное объединение (по условиям в where) давно отжило свое. И дело здесь не в том., что это "неправильно", а в том, что все сервера СУБД (в т.ч. и микрософтовские) оптимизирует производительность запроса по явному объединению (через join).
Прик вне форума Ответить с цитированием
Старый 14.02.2012, 12:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Прицепите JOIN-ы к Спектакли согласно правил СУБД примерно так:
Код:
LEFT JOIN Работники R1 ON R1.Kod=Спектакли.[Режиссер постановщик]
LEFT JOIN Работники R2 ON R2.Kod=Спектакли.[Художник постановщик]
LEFT JOIN Работники R3 ON R3.Kod=Спектакли.[Дирижер постановщик]
и в SELECT-е:
Код:
R1.[ФИО работника] AS Fio1,R2.[ФИО работника] AS Fio2,R3.[ФИО работника] AS Fio3
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2012, 12:11   #5
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Согласна с Прик, связь через where устарела и уже давно доказано что она не эффективна, все довольно хорошо всегда можно сделать через различные join
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 14.02.2012, 12:39   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
все сервера СУБД (в т.ч. и микрософтовские) оптимизирует производительность запроса по явному объединению (через join).
Интересно бы было посмотреть на источник такой информации
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2012, 13:03   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Аватар, встречала это во многих книгах, последние были по ораклу
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 14.02.2012, 13:06   #8
mansuetudo
Пользователь
 
Регистрация: 08.11.2011
Сообщений: 46
По умолчанию

Не знаю насчёт книг, работаю с ораклом, дельты для базы присылаются разработчиком, и пока ни в одном не встречала подобного.
mansuetudo вне форума Ответить с цитированием
Старый 14.02.2012, 13:17   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Sparky Посмотреть сообщение
Аватар, встречала это во многих книгах, последние были по ораклу
Будет свободное время поэксперементирую с планами запросов на MSSQL. Мучает сомнение, что это так.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2012, 13:29   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Будет свободное время поэксперементирую с планами запросов на MSSQL. Мучает сомнение, что это так.
аналогично.
я более чем уверен, что where и join'ы преобразовываются в один и тот же внутренний запрос...
Буду признателен, если кто-то фактами подтвердит или опровергнет данный постулат. (неплохо бы и для разных СУБД)


p.s. думаю, что будет уместным не продолжать обсуждение в данной теме, а создать новую тему для обсуждения данной проблемы.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема вывода гиперссылок в DBGrid!!!!!!! trad C/C++ Базы данных 0 15.12.2010 21:40
запрос для вывода дерева. bondik SQL, базы данных 1 06.12.2010 07:50
переполнение в процедуре вывода таблицы о сортировках SvetOk Помощь студентам 1 25.11.2009 08:21
Ошибка при попытке вывода полей из таблицы в ORACLE older Общие вопросы Delphi 2 04.06.2008 17:26
Какой компонент выбрать для вывода таблицы картинок ICO Comer_Jus Мультимедиа в Delphi 3 21.05.2008 20:35