Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Длинный AND / 10 сообщений из 10, страница 1 из 1
25.03.2004, 12:28
    #32456588
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
Стоит FB1.5Release + IBExpert

В настройках по умолчанию установлен короткий AND
#CompleteBooleanEvaluation = 0

Есть запрос

SELECT Id
FROM Goods
WHERE (RDB$Modified = 1)
AND (Gen_ID(GEN,1)>0)

Устанавливаю значения генератора в 0
после выполнения запроса GEN установился в 22000, те выполняась проверка обеих частей.

Создаю индекс на поле RDB$Modified, снова выполняю запрос (генератор устанавливаю в 0), и после выполнения получаю значение генератора 122

Скажите мне что нибудь по этому поводу:)
...
Рейтинг: 0 / 0
25.03.2004, 12:37
    #32456613
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
Я бы сказал, что в указанной таблице 22000 записей, из них со значением
указанного поля, равным 1, - 122.
...
Рейтинг: 0 / 0
25.03.2004, 12:40
    #32456626
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
А объяснить ты можешь почему в первом случае 22000, ведь AND должен игнорировать приращение генератора
...
Рейтинг: 0 / 0
25.03.2004, 13:22
    #32456744
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
Тебе кто-нибудь обещал, что короткий AND вычисляется слева направо?
...
Рейтинг: 0 / 0
25.03.2004, 15:47
    #32457159
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
Вот блин, поменял местами условие и все заработало как надо:)
теперь придется во всех запросаж ж.....у на голову менять
...
Рейтинг: 0 / 0
25.03.2004, 15:56
    #32457188
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
остается вопрос, как правильно ставить условия.
Выбрать строки у которых если :paramId=0 то выбрать все иначе :ParamId=ParamId

SELECT *
FROM t1
WHERE (:ParamId = 0) OR (:ParamId = ParamId)

SELECT *
FROM t1
WHERE (:ParamId = 0) OR ((:ParamId <> 0) AND (:ParamId = ParamId))

SELECT *
FROM t1
WHERE (:ParamId = ParamId) OR (:ParamId = 0)

............................................

А что что-то я немного уже запутался, или лучше дайте ссылку на какую-нибудь доку по этому поводу
...
Рейтинг: 0 / 0
25.03.2004, 16:20
    #32457268
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
автортеперь придется во всех запросаж ж.....у на голову менять

И завтра это перестанет работать. Ибо порядок вычисления предикатов выбирает сервер. Это часть процесса оптимизации запросов.
...
Рейтинг: 0 / 0
25.03.2004, 16:59
    #32457350
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
>vovan1

Второе...
...
Рейтинг: 0 / 0
25.03.2004, 17:06
    #32457362
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
пока второе и используется, но раздражает ((:ParamId <> 0)
это тоже самое (но не для IB) что

begin
if (i=0) then
////////////
else if(i<>0) then
/////////////////
end
...
Рейтинг: 0 / 0
25.03.2004, 17:34
    #32457432
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный AND
У того, что ты привел, есть заложенная последовательность.
Плата за безразличие к ней - то, что тебя раздражает...
:)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Длинный AND / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]