Непонятка с IN

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Непонятка с IN

Сообщение Wontar » 02 мар 2006, 12:33

Привет всем.
Вот тут попал в непонятную историю с запросиком.

Код: Выделить всё

SELECT
    CODE,
    STDTIME,
    DESCRIPTION
FROM
    OPERATIONS
WHERE 
    CODE IN (:ops)
ORDER BY
    CODE
Code=VarChar(7) PK.
Нужно выбрать операций которые есть в списке. (типа. 100L00,C657L00).
Однако FB не дает прописать в параметр строку длиной >7.

Как подправить запрос или как правильно составить подскажите пож-та.

Олег.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 02 мар 2006, 12:44

почитай пример в факе.

... where :ops Containing '~'||code||'~' ...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 мар 2006, 12:47

и где у людей логика...
ну ПОЧЕМУ сервер должен думать, что переданный в виде СТРОКИ ПАРАМЕТР на самом деле является ПЕРЕЧНЕМ ЗНАЧЕНИЙ для сравнения?

Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Сообщение Wontar » 02 мар 2006, 13:25

ну ПОЧЕМУ сервер должен думать, что переданный в виде СТРОКИ ПАРАМЕТР на самом деле является ПЕРЕЧНЕМ ЗНАЧЕНИЙ для сравнения?
1. Я считал что когда стоит IN то в скобках подразумевается список.
2. Разве параветры не заменяются Delphi на строки? По идее конечный вариант представляет собой

Код: Выделить всё

where code in ('C100L00','C657L00').

разве это не список ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 мар 2006, 13:33

1. Я считал что когда стоит IN то в скобках подразумевается список.
почему? потому что тебе так показалось? Параметр имеет конкретный тип.
Допустим, ты попался на строке (обычно так числа любят перечислять). Но. Почему ты решил, что разделителем "параметров" в строке является запятая? :) потому что это "разделитель" в SQL?

where field in (1, 2, 3...)
where field in (:param1, :param2, :param3...)

p.s. вопросы риторические, можно не отвечать.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 02 мар 2006, 13:49

Автор, почитай, наконец, ФАК
http://www.ibase.ru/ibfaq.htm#inparam

Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Сообщение Wontar » 02 мар 2006, 13:53

Почему ты решил, что разделителем "параметров" в строке является запятая? потому что это "разделитель" в SQL?
Потому что прочел в "Firebird руководство разработчика баз данных". Точнее там есть пример использвания IN.

зы. риторический вопрос к kdv и ивану: А можно ответить без наездов ? Может не все такие профи ?
ззы. За ссылку спасибо. изучим.

зззы. решил проблему. просто стал давать передачу не по параметру, а чисто перестройкой запроса.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 02 мар 2006, 14:02

А можно ответить без наездов ?
Где в моем первом посте наезд? Я тебя отослал строго туда где есть ответ на твой вопрос, спокойно и без наездов. По ходу дела фак читать ты не желаешь, а смысл каждый раз озвучивать фак в форуме? КДВ старался сделал сайт, где все по полочкам разложено, и тем не менее каждый раз новички требуют чтоб им еще раз растолковывали написаное, извини, конечно, но это неинтересно.

Удачи! :)

Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Сообщение Wontar » 02 мар 2006, 14:13

2Ivan. Проблема не в том, что я не хочу читать ФАК. Я его давно прочитал. Если присмотреться то он довольно большой, а каждый человек формирует вопрос-ответ по своему, поэтому поиск не слишком эффективный.

Я вас понимаю. Надоели люди спрашивающие одно и тоже, но разве это когда-нибудь изменится ?
Для этого пожалуй нужно прикрепить каждый вопрос-ответ к отдельному посту в форуме и обвесить линками.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 мар 2006, 14:16

отому что прочел в "Firebird руководство разработчика баз данных". Точнее там есть пример использвания IN
примеры есть везде. только не такие, как ты привел.
Если же ты в книге Хелен нашел пример where field in (:param), то скажи страницу, я издателю передам, чтобы ошибку исправили.
А можно ответить без наездов ? Может не все такие профи ?
основная проблема интернета в том, что вопрошающий не видит эмоций отвечающего. поэтому любой удивленный, ироничный или саркастический ответ, не оформленный смайликами, воспринимается как наезд :)

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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 02 мар 2006, 14:27

Если присмотреться то он довольно большой, а каждый человек формирует вопрос-ответ по своему, поэтому поиск не слишком эффективный.
На самом деле моего первого поста вполне достаточно, чтоб даже в ФАК не заглядывать :wink: там только надо догадаться (посмотрев на '~'), что в параметр надо запихнуть строку с цифирками разделенными тильдами и все сразу заработает.
А ты просто поторопился, решив что на тебя наезжают, присмотрись, первый же пост достаточен для решения твоей проблемы :)

Ответить