Динамический запрос

  • Автор темы FreeWay
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

FreeWay

Гость
#1
Всем привет. С простенькими запросами нет проблемм, но тут понадобилось сделать в одном запросе выборку из нескольких таблиц, подскажите как правильно написать запрос. БД 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)");
 
04.09.2006
2 566
2
#2
А вложенные запросы поддерживаются? А Вложенный запрос может возвращать более одной записи?
Вообще, sax_ol прав, без текста сообщения говорить не о чем


Кстати, Билдер не анализирует текст запросов. Для него это просто строка. Если Билдер ругается на этапе компиляции, то проблема не в запросе
 
F

FreeWay

Гость
#3
на этапе компиляции ругаццо не может, там не на что ругаться. ругается при выполнении запроса.
думаю это ошибка именно в синтаксисе, так как такой запрос:

Код:
SELECT chan_name FROM key_channels WHERE chan_id=668
отрабатывает.

запрос возвращает по одной записи:
chan_name
Start
Stop
 
F

FreeWay

Гость
#4
блин забыл ошибку выложить)
вот:
 

Вложения

F

FreeWay

Гость
#5
да, если таким макаром [] сделать, то работает.
а теперь хочу немного доработать:
этот запрос выгребает много записей, так как для одного 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
спасибо, темма закрыта :)
 
Статус
Закрыто для дальнейших ответов.