powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / IQ-16 на агрегацию фильтр not null не работает
6 сообщений из 6, страница 1 из 1
IQ-16 на агрегацию фильтр not null не работает
    #38465543
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На агрегацию фильтр not null не работает, например, в такой ситуации:

SELECT 1 as gid, 1 as t, 10 as v
INTO T_T
UNION ALL
SELECT 1 as gid, 2 as t, 20 as v
UNION ALL
SELECT 2 as gid, 1 as t, 30 as v

SELECT *
FROM (
SELECT gid,
MAX(CASE WHEN t=2 THEN v ELSE NULL END) as v2
FROM T_T
GROUP BY gid
) TT
WHERE v2 is not null

если использовать having v2 is not null то все работает.

по факту having использовать не могу, так как фильтр накладывается извне на вьюху, в которой group by.

Помогите решить задачку!
...
Рейтинг: 0 / 0
IQ-16 на агрегацию фильтр not null не работает
    #38465569
john2007,

Баг новой 16-й IQ.
Если поменять на "is null", то работает.
Если проверить "is not null" на 15-й, то работает.
...
Рейтинг: 0 / 0
IQ-16 на агрегацию фильтр not null не работает
    #38466045
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл пароль,

Спасибо,
Да, очень похоже на баг.
Интересно, можно ли как-то обойти?
...
Рейтинг: 0 / 0
IQ-16 на агрегацию фильтр not null не работает
    #38466427
john2007,

Судя по плану IQ 16 просто условие is not null "забывает" (ноды Filter в плане просто нет), если оно применяется к агрегатной функции.

Для "IS NULL" в плане нода Filter есть и условие там применяется реально как Having (что по сути верно):
Condition 1 (Having) ( MAX(MAX(CASE WHEN (T_T.t = 2) THEN T_T.v ELSE NULL END ))`(1) IS NULL)

Думаю, что оптимизатор слишком заумно считает, что агрегатная функция не должна вернуть NULL в принципе и поэтому условие IS NOT NULL просто не нужно проверяется. А другое условие нужно проверять - вот и workaround, например:

where v2 <> 0 or v2=0

Будет эквивалетно v2 is not null

P.S> Но в любом случае это баг в 16-й - в 15 всё нормально работает.
...
Рейтинг: 0 / 0
IQ-16 на агрегацию фильтр not null не работает
    #38468008
bmv_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тикет в сап выставили?
Что говорят ?
...
Рейтинг: 0 / 0
IQ-16 на агрегацию фильтр not null не работает
    #38472535
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл пароль,

Да, спасибо, я все это выяснил с планами и решение с <>0 =0 мне тоже в голову пришло, но нужно было решение с обеспечением прозрачности для пользователя вьюхи, чтобы он все таки мог использовать IS NOT NULL

Пару дней назад удалось решить задачу совмещением нескольких действий.

Запрос во вьюхе оборачиваем

SELECT (CASE WHEN V<>0 OR V=0 THEN V ELSE NULL END) as V
FROM
(SELECT MAX(V) as V
..............
) as T

В результате теперь такая вьюха работает правильно.

В техподдержку каких-либо разработчиков ПО я ни разу не обращался, тикета нет ))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / IQ-16 на агрегацию фильтр not null не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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