Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1182168028
bobah
2007-06-18 16:00
2007.08.26
Приведение к типу Single


10-1136459207
Gear
2006-01-05 14:06
2007.08.26
OleVariabt и safearray of BSTRs


2-1186288632
zxs
2007-08-05 08:37
2007.08.26
подксажите в чем ошибка


2-1185985576
Ruffian
2007-08-01 20:26
2007.08.26
Генератор списков паролей


1-1182165752
Makhanev Alexander
2007-06-18 15:22
2007.08.26
Как убить поток...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский