• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

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)");
 
E

European

А вложенные запросы поддерживаются? А Вложенный запрос может возвращать более одной записи?
Вообще, sax_ol прав, без текста сообщения говорить не о чем


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

FreeWay

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

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

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

FreeWay

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

Вложения

  • error.jpg
    error.jpg
    33,6 КБ · Просмотры: 455
F

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

спасибо, темма закрыта :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!