Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как вводить в один параметр несколько значений?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Рт
Гость





СообщениеДобавлено: Чт Фев 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: Как вводить в один параметр несколько значений? Ответить с цитатой

БЛИН!!! Кое что в моей мессаге пропало Smile(
строчку вида #{номер документа}##{номер документа}# и т.д.
Далее написать запрос
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".
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...