Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Рт Гость
|
Добавлено: Чт Фев 07 2002 15:16 Заголовок сообщения: Как вводить в один параметр несколько значений? |
|
|
У меня есть простой запрос, в нем нужно выбрать нек. записи, по нек. условиям, одним уз условий является номер документа, но номер может изменяться, и количество номеров, данные по которым должны одновременно попасть в запрос тоже не постоянно.
SELECT * FROM * WHERE * AND zd.doc_no IN (:0)
Может нужно как-нибудь через процедуры? Буду благодарен любой помощи. |
|
Вернуться к началу |
|
 |
Евгений Григорьев Гость
|
Добавлено: Чт Фев 07 2002 16:04 Заголовок сообщения: Re: Как вводить в один параметр несколько значений? |
|
|
После IN в скобочках пишешь через запятую необходимые номера. Например
SELECT * FROM doc_list WHERE doc_list.doc_no IN (235,345,455)
вернет инфу по трем документам.
Или проблема в чем то другом? |
|
Вернуться к началу |
|
 |
Pin
Зарегистрирован: 13.01.2002 Сообщения: 32 Откуда: Magnitogorsk
|
Добавлено: Чт Фев 07 2002 20:15 Заголовок сообщения: Re: Как вводить в один параметр несколько значений? |
|
|
Он наверное хотел без изменения самого тела запроса... Но так действительно проще всего!!! Можно конечно что-нибудь другое замутить: Например, можно в программе сформировать строчку вида ### и т.д. Далее написать запрос SELECT * FROM doc_list WHERE ('#'||doc_list.doc_no||'#', :par) где - для каждой базы данных индивидуальна |
|
Вернуться к началу |
|
 |
Pin
Зарегистрирован: 13.01.2002 Сообщения: 32 Откуда: Magnitogorsk
|
Добавлено: Чт Фев 07 2002 20:23 Заголовок сообщения: Re: Как вводить в один параметр несколько значений? |
|
|
БЛИН!!! Кое что в моей мессаге пропало ( строчку вида #{номер документа}##{номер документа}# и т.д. Далее написать запрос SELECT * FROM doc_list WHERE {функция поиска подстроки}('#'||doc_list.doc_no||'#', :par) где {функция поиска подстроки} - для каждой базы данных индивидуальна Однако IMHO овчинка выделки не стоит - не надо извращаться и сделать просто и понятно - как в первом варианте... |
|
Вернуться к началу |
|
 |
Carpenter Гость
|
Добавлено: Пт Фев 08 2002 08:15 Заголовок сообщения: А может создать маленькую таблицу,.. |
|
|
В которую сбрасывать требуемые номера. И увязать ее в запросе с таблицей документов. Правда, идея сия актуальна для тех БД, в которых можно сохранять локальные таблицы, потому что если выкладывать эту таблицу с временными значениями на сервер, проблем и потока отборного русского языка от пользователей не оберешься.
С уважением, Дровосек |
|
Вернуться к началу |
|
 |
Рт Гость
|
Добавлено: Пт Фев 08 2002 09:07 Заголовок сообщения: Re: А может создать маленькую таблицу,.. |
|
|
Спасибо что откликнулись, но только по-моему меня не поняли: мне нужно чтобы пользователь каждый раз мог выбрать разные документы, и каждый раз разное их количество, т.е. сегодня он вводит 23, 47 - а завтра 54, 76, 91, 102... главная проблема с тем, что не известно, ск. документов ему нужно будет выбрать в след. раз. Мне нужно что-то типо |
|
Вернуться к началу |
|
 |
Рт Гость
|
Добавлено: Пт Фев 08 2002 09:13 Заголовок сообщения: Re: А может создать маленькую таблицу,.. |
|
|
упс ...типо ... AND zd.doc_no IN CAST (:0 AS VARRAY OF NUMERIC) эта строчка конечно глупо написана, но может она прояснит что-нибудь если написать AND zd.doc_no IN CAST (:0 AS NUMERIC) то она воспринемает только последнее значение, к. вводит пользователь. |
|
Вернуться к началу |
|
 |
Евгений Григорьев Гость
|
Добавлено: Пт Фев 08 2002 12:53 Заголовок сообщения: Прочитал все... Подробности надо... |
|
|
Какую систему пользуешь? Ежели ACCESS или MS SQL то могу помочь детально, ежели нет - то только в общих чертах.
ИМХО в обших чертах надо динамически формировать строку запроса.
ЛИБО. В вышеназванных системах есть возможность вложенных запросов. То есть можно написать нечто типа
SELECT ... FROM table1 WHERE table1.typeX_field = (SELECT typeX_field FROM table2 WHERE...)
Cначала выполняется запрос в скобках и его резалт (кстати! именно массив) передается внешнму запроса как аргумент условия отбора. |
|
Вернуться к началу |
|
 |
Nick Troshkov Гость
|
Добавлено: Пт Фев 08 2002 15:01 Заголовок сообщения: Re: Прочитал все... Подробности надо... |
|
|
Только не
...field = (SELECT...
а
...field IN (SELECT...
иначе возможна ошибка.
Ник. |
|
Вернуться к началу |
|
 |
Евгений Григорьев Гость
|
Добавлено: Пт Фев 08 2002 15:22 Заголовок сообщения: Очень может быть...+ |
|
|
Мне тоже помниться, что я использовал именно IN (но это было в ACCESSе). А приведенный пример я из книжки "Использование MS SQL Server 7.0" взял, так что звиняйте. |
|
Вернуться к началу |
|
 |
Nick Troshkov Гость
|
Добавлено: Пт Фев 08 2002 16:08 Заголовок сообщения: Re: Очень может быть...+ |
|
|
Работоспособны оба варианта, но некоторые БД (например Interbase) выдают ошибку если в запросе "field=(SELECT" более 1 значения. Т.к. равенство предполагает только одно значение. С IN все работают правильно, т.к. это означает "field содержится во множестве из SELECT". |
|
Вернуться к началу |
|
 |
|