Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
ВнизSQL Найти похожие ветки
← →
Alex8 (2007-07-28 13:42) [0]Уважаемые мастера !
Вот такая ситуация :
SELECT * FROM Tiz WHERE iavt IN (1, 2, 3, 4) - работает
SELECT * FROM Tiz WHERE iavt IN (1 .. 4) - выдается ошибка
Это моя ошибка или ".." в SELECT не допускается ?
BETWEEN мне по ряду причин не подходит. Спасибо.
← →
Anatoly Podgoretsky © (2007-07-28 13:47) [1]BETWEEN наиболее всего подходит.
← →
Alex8 (2007-07-28 13:50) [2]
> Это моя ошибка или ".." в SELECT не допускается ?
← →
Desdechado © (2007-07-29 19:44) [3]А справку по SQL почитать ломает?
IN - это не диапазон, это строгое перечисление, которое работает для любых типов данных.
← →
MsGuns © (2007-07-29 20:17) [4]>Alex8 (28.07.07 13:42)
>BETWEEN мне по ряду причин не подходит. Спасибо.
Ну, если религия не позволяет, то
SELECT * FROM Tiz WHERE (iavt=1) or (iavt=2) or (iavt=3) or (iavt=4)
← →
Юрий Зотов © (2007-07-29 21:29) [5]WHERE iavt > 0 AND iavt < 5
Только зачем извращаться, если есть BETWEEN?
← →
MsGuns © (2007-07-29 22:34) [6]>Юрий Зотов © (29.07.07 21:29) [5]
>Только зачем извращаться, если есть BETWEEN?
Ну сказано же - низзя ;)
← →
Alex8 (2007-08-02 08:47) [7]Честно говоря, я уже не ждал ответа на свой вопрос и
просто из любопытства заглянул на форум.
Из одинаковой реакции собеседников делаю вывод, что
вопрос плохо сформулирован. Хотя мне казалось, что
все четко.
Можно ли использовать диапозон в SELECT * FROM Tiz WHERE iavt IN (1 .. 4)
или нет.(да, нет). И если можно, то где я ошибаюсь?
Этот вопрос возник потому что оператор IN (вне SQL) допускает
использование диапазона IN(a1, a2, a3..a7, a8).
И если, задавая вопрос, я говорю, что Between мне не подходит,
то тем самым я исключаю ответы, которые, к сожалению, все-таки
поступили.
Теперь, зачем мне это нужно ?
Дело в том, что SELECT у меня формируется програмно
Основноя схема SELECT * FROM Tiz Where iAvt IN(n1, n2 ....nN),
где n1, n2 ....nN коды объектов (они задаются пользователем),
последовательо добавляемых в IN при промотре этих объектов.
В случае диапазона (пользователь задает его через "-")
я легко заменяю "-" на ".." и вставляю в IN.
A при Between нарушается однотонность цикла.
Вообщем дополнительная работа.
Конечно, все можно сделать, но хочется-то по-проще.
← →
Sergey13 © (2007-08-02 09:13) [8]> [7] Alex8 (02.08.07 08:47)
> но хочется-то по-проще.
1. За ту неделю, что вопрос задал, можно было написать вполне "однотонный" цикл с парсером введенной юзером последовательности.
2. При таком подходе можно нарваться на превышение длины запроса, если юзер например ввдет 1-10000000 (типа ФСЁ)
3. Если в СУБД есть временные таблицы, можно использовать их. Заполнить номерами и сджойнить с главной таблицей. Самый оптимальный план выполнения будет, ИМХО.
← →
Alex8 (2007-08-02 18:43) [9]>нарваться на превышение длины запроса
>Самый оптимальный план выполнения будет, ИМХО.
Согласен. Но прошу прощения за свою темноту:
1. Я не знаю, как определить максимально допустимую длину запроса.
2. Я не понял этой фразы по поводу оптимального плана
и не знаю, что такое ИМХО.
Был бы благодарен за соответствующие пояснения.
← →
Desdechado © (2007-08-02 20:00) [10]> В случае диапазона (пользователь задает его через "-")
> я легко заменяю "-" на ".." и вставляю в IN.
Что мешает свою "монотонность цикла" разбавить конструкцией " AND x BETWEEN :1 AND :2"? Элементарно до ужаса.
> Я не понял этой фразы по поводу оптимального плана и не знаю, что такое ИМХО.
Букварь читать по своей СУБД, там написано, чтотакое план запроса и на что он влияет и как на него влиять.
← →
Anatoly Podgoretsky © (2007-08-02 20:49) [11]
> Можно ли использовать диапозон в SELECT * FROM Tiz WHERE
> iavt IN (1 .. 4)
> или нет.(да, нет).
Диапазон в SQL называется BEETWEN
← →
Anatoly Podgoretsky © (2007-08-02 20:51) [12]Запись IN(a1, a2, a3..a7, a8). читается как Fld=a1 OR Fld between a3 and a7
← →
Sergey13 © (2007-08-03 08:39) [13]> [9] Alex8 (02.08.07 18:43)
> 1. Я не знаю, как определить максимально допустимую длину запроса.
Текст запроса - это строка, которая имеет ограничение по длине.
> 2. Я не понял этой фразы по поводу оптимального плана
План выполнения запроса - это то как сервер выполняет запрос, что сначала, что потом. Из Москвы в Жмеринку можно ехать напрямую, а можно через Владивосток. Вот и в запросах так же.
> и не знаю, что такое ИМХО.
Абревиатура "По моему скромному мнению" по аглицки.
← →
Alex8 (2007-08-03 11:15) [14]Спасибо Всем за участие в беседе.
← →
Плохиш © (2007-08-03 11:28) [15]
> Этот вопрос возник потому что оператор IN (вне SQL) допускает
> использование диапазона IN(a1, a2, a3..a7, a8).
Оператор IN в SQL или вне оного подчиняется определённым правилам, описанным в документации к SQL или "вне SQL", но как известно - не царское это дело документацию и справки читать.
← →
Anatoly Podgoretsky © (2007-08-03 14:26) [16]> Плохиш (03.08.2007 11:28:15) [15]
А если не царское, то зачем же царь занимается программированием?
← →
Вася Правильный (2007-08-03 20:40) [17]
> зачем же царь занимается программированием?
от скуки
← →
Anatoly Podgoretsky © (2007-08-03 20:42) [18]> Вася Правильный (03.08.2007 20:40:17) [17]
Так не царское дело.
← →
Вася Правильный (2007-08-03 20:45) [19]царю все позволено, но не все хочется
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c