Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
15-1185522868
Alkid
2007-07-27 11:54
2007.08.26
Зараза vs. Virtual Machine


2-1185619754
Draught
2007-07-28 14:49
2007.08.26
Убрать scrollbar у DBGrid


2-1186051620
oleg__
2007-08-02 14:47
2007.08.26
Не загружается DLL


9-1158659677
Slavikkk
2006-09-19 13:54
2007.08.26
Автовыключение в ODE


8-1164033612
Виктор1
2006-11-20 17:40
2007.08.26
Caption чужой кнопки