Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Динамический запрос
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
FreeWay
Всем привет. С простенькими запросами нет проблемм, но тут понадобилось сделать в одном запросе выборку из нескольких таблиц, подскажите как правильно написать запрос. БД ASA9

в Sybase Central этот запрос отрабатывает SELECT chan_name, Start,Stop FROM key_channels,KEY_public_gen WHERE chan_id= (SELECT chan_id FROM key_cross WHERE key_id=632

а вот с билдера ругается на синтаксис( подправьте кто может)

Query1->SQL->Add("SELECT chan_name, Start,Stop FROM key_channels,KEY_public_gen WHERE chan_id= (SELECT chan_id FROM key_cross WHERE key_id=632)");
sax_ol
Цитата(FreeWay @ 2:07:2008 - 08:15) *
а вот с билдера ругается на синтаксис
И что говорит?
European
А вложенные запросы поддерживаются? А Вложенный запрос может возвращать более одной записи?
Вообще, sax_ol прав, без текста сообщения говорить не о чем


Кстати, Билдер не анализирует текст запросов. Для него это просто строка. Если Билдер ругается на этапе компиляции, то проблема не в запросе
FreeWay
на этапе компиляции ругаццо не может, там не на что ругаться. ругается при выполнении запроса.
думаю это ошибка именно в синтаксисе, так как такой запрос:

SELECT chan_name FROM key_channels  WHERE chan_id=668

отрабатывает.

запрос возвращает по одной записи:
chan_name
Start
Stop
sax_ol
Цитата(FreeWay @ 2:07:2008 - 09:03) *
думаю это ошибка именно в синтаксисе
Гадать будем? Тогда подождите, я кофе сейчас допью и начнем.
FreeWay
блин забыл ошибку выложить)
вот:
sax_ol
А так? Правда не уверен в правильности под вашу бд, но смысл в том, чтобы "заэкранировать" поля, т.к. есть подозрение что такие как Start и Stop могут ввести драйвер в ступор.
SELECT [chan_name], [Start],[Stop] ...
FreeWay
да, если таким макаром [] сделать, то работает.
а теперь хочу немного доработать:
этот запрос выгребает много записей, так как для одного chan_name есть много start stop, поясню для ясности
chan_name это имя юзера, start stop это дата начала действия ключа и соответственно конец действия. Все даты ключей хранятся, поэтому мне выдает около 30 строк с разными датами, но мне надо одну - текущий, действующий ключь, для этого делаю:

SELECT  chan_name, max([Start]),max([Stop]) FROM key_channels,KEY_public_gen WHERE chan_id= (SELECT chan_id FROM key_cross WHERE key_id=632)


на что выдает:

function or column reference to "chan_name" must also appear in a "GROUP BY"

С ЭТИМ РАЗОБРАЛСЯ, записал так:

SELECT  chan_name, MAX([Start]),MAX([Stop]) FROM key_channels,KEY_public_gen WHERE chan_id= (SELECT chan_id FROM key_cross WHERE key_id=632) GROUP BY chan_name


спасибо, темма закрыта rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.