powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Длинный AND
10 сообщений из 10, страница 1 из 1
Длинный AND
    #32456588
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоит 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
Длинный AND
    #32456613
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сказал, что в указанной таблице 22000 записей, из них со значением
указанного поля, равным 1, - 122.
...
Рейтинг: 0 / 0
Длинный AND
    #32456626
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А объяснить ты можешь почему в первом случае 22000, ведь AND должен игнорировать приращение генератора
...
Рейтинг: 0 / 0
Длинный AND
    #32456744
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе кто-нибудь обещал, что короткий AND вычисляется слева направо?
...
Рейтинг: 0 / 0
Длинный AND
    #32457159
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот блин, поменял местами условие и все заработало как надо:)
теперь придется во всех запросаж ж.....у на голову менять
...
Рейтинг: 0 / 0
Длинный AND
    #32457188
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
остается вопрос, как правильно ставить условия.
Выбрать строки у которых если :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
Длинный AND
    #32457268
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортеперь придется во всех запросаж ж.....у на голову менять

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

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

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


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