|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вложенный запрос 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 работаю только недавно. Не могу понять в чем ошибка. Первой мыслью было, что я где-то лишнюю закрываюю скобку поставил (или не поставил открывающую). Но вроде с скобками все хорошо... Где же я затупил? |
#2
|
||||
|
||||
сдается мне ему в
Цитата:
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Последний раз редактировалось Yurk@, 26.02.2014 в 15:37. |
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
Dagmanor (26.02.2014)
|
#3
|
|||
|
|||
Цитата:
Пробовал... Не помогает. |
#4
|
||||
|
||||
Если
Код:
SELECT seminar.* , (SELECT test.guid from test where test.id IN (SELECT course_test.test_id FROM course_test WHERE course_test.course_id = 2)) test_guid FROM seminar WHERE seminar.id IN (SELECT course_seminar.seminar_id FROM course_seminar WHERE course_seminar.Course_id = 2) Google в помощь |
#5
|
|||
|
|||
Запрос в принципе проблемный.
Как ты думаешь, сколько записей вернет тебе вложенный запрос в SELECT? Ты уверен, что он всегда вернет одну запись? Подумай как его переписать через JOIN'ы (не имея БД и не зная что ты хочешь очень сложно подсказать что-то более конкретное). |
#6
|
||||
|
||||
Действительно, проверь еще всегда ли test_guid возвращает одну запись
Google в помощь |
#7
|
||||
|
||||
Цитата:
Цитата:
ТС, у меня запрос вида: Код:
SELECT s.*, ( SELECT t.guid FROM test t WHERE t.id IN ( SELECT ct.test_id FROM course_test ct WHERE ct.course_id = 2 ) ) AS test_guid FROM seminar s WHERE s.id IN ( SELECT cs.seminar_id FROM course_seminar cs WHERE cs.course_id = 2 ) PS. попробуй такой запрос (не уверен что все 100% точно со связями, но принцип такой) Код:
SELECT s.*, t.guid test_guid FROM seminar s JOIN course_test ct ON ct.course_id = 2 LEFT JOIN test t ON ct.test_id = t.id JOIN course_seminar cs ON s.id = cs.seminar_id WHERE cs.course_id = 2 Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Последний раз редактировалось Yurk@, 27.02.2014 в 13:26. |
#8
|
||||
|
||||
Звездочку вместе с запятой можно использовать только с точечным именем таблицы, то есть:
Код:
select s.*, some_other from my_table s, other_table; -- можно select *, some_other from my_table, other_table; -- нельзя Не стоит путать форумы с богадельнями. © Bargest |