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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 15:06   #1
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию Вложенный запрос Firebird

Всем доброго времени суток. Прошу помощи в написании вложенного запроса для Firebird 2.5. Работаю в Delphi 7 с помощью компонентов FIBPlus.

Запрос такой :


Код:
SELECT * ,
 (SELECT test.guid from test where test.id IN (SELECT course_test.test_id FROM course_test WHERE course_test.course_id = 2)) AS test_guid 
FROM seminar WHERE seminar.id IN (SELECT course_seminar.seminar_id FROM course_seminar WHERE course_seminar.Course_id = 2)
Получаю вот такую ошибку:

SQL error code = -104.
Token unknown - line 1, column 121.
).
'. Process stopped. Use Step or Run to continue.


С Firebird работаю только недавно. Не могу понять в чем ошибка. Первой мыслью было, что я где-то лишнюю закрываюю скобку поставил (или не поставил открывающую). Но вроде с скобками все хорошо... Где же я затупил?
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 15:31   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Что вообще IN во второй строке значит? Там не место этому
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 15:41   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

какой-то запрос у Вас хитроумнозакрученный. Проще никак?

в IBExpert попробуйте запрос выполнить, что он скажет?
и вообще, такой запрос (опять же в IBExpert) отрабатывает?

Код:
SELECT * , (SELECT test.guid from test where test.id = КонкретноеЧисло) AS test_guid 
FROM seminar where seminar.id =  КонкретноеЧисло
p.s. на мой взгляд, ваш запрос сложноват для FireBird...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.02.2014, 15:49   #4
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

IBExpert при попытке выполнить этот запрос говорит "multiple rows in singleton select.".
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 15:53   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вложенный запрос в списке SELECT должен возвращать единственное значение или NULL
SELECT MAX(test.guid) from
или
SELECT MIN(test.guid) from
или
FIRST 1
в зависимости от того, что нужно

За IN в #2 не прав, не разобрался до конца
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 15:57   #6
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Вложенный запрос в списке SELECT должен возвращать единственное значение или NULL
Да я теперь понял что ошибка из-за того что Вложенный запрос возвращает больше одной записи. Но ситуация такова, что тестов может быть много. Я не опытен с FireBird. Если есть возможность - подскажите как быть в таких случаях.
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 15:58   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Дык что за случай, что получить и из чего
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 16:05   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

это "почти" ваш запрос, но он должен работать
Код:
SELECT seminar.* , test.guid
FROM seminar, test 

WHERE seminar.id IN ( SELECT course_seminar.seminar_id 
                      FROM course_seminar 
                      WHERE course_seminar.Course_id = 2 
                   )
  and test.id IN ( SELECT course_test.test_id 
                   FROM course_test 
                   WHERE course_test.course_id = 2 
                   )
Попробуйте, он вернет то что вам нужно?
Нет, там есть лишние!
Тогда там вероятно не хватает еще одного условия
Код:
 and test.seminar_id=seminar.id
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.02.2014, 16:08   #9
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

Есть курсы для обучения. Курс может содержать уроки/семинары и тесты. Информация о тот какой курс что содержит находится в таблицах course_test и course_seminar.
примерная структура этих таблиц такая :
TABLE course_test/course_seminar
( id INTEGER NOT NULL ,
course_id INTEGER NOT NULL,
test_id(/seminar_id) INTEGER NOT NULL,
level SMALLINT DEFAULT 1 NOT NULL ,
PRIMARY KEY (id) )

Сами же уроки/семинары и тесты находятся в таблицах seminar и test.
Надо выбрать все уроки и тесты которые относятся к конкретному курсу...
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 16:22   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я бы выбрал отдельно уроки и отдельно тесты и объединил два запроса через UNION. Добавив признак для отличия одних от других
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенный запрос GinIvan Помощь студентам 0 27.03.2012 13:01
Вложенный запрос Ti_pain) SQL, базы данных 2 17.12.2011 16:56
Delphi. TreeView. Firebird: Вложенный SQL-запрос. Alexei91 БД в Delphi 5 01.08.2010 08:04
Firebird 2.5. Группировка и вложенный запрос. Антон Ю.Б. SQL, базы данных 8 02.07.2010 17:22
вложенный запрос выборка по многим критериям Droid БД в Delphi 2 23.05.2010 19:31