|
IQ-16 на агрегацию фильтр not null не работает
|
|||
---|---|---|---|
#18+
На агрегацию фильтр 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. Помогите решить задачку! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2013, 18:40 |
|
IQ-16 на агрегацию фильтр not null не работает
|
|||
---|---|---|---|
#18+
john2007, Баг новой 16-й IQ. Если поменять на "is null", то работает. Если проверить "is not null" на 15-й, то работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2013, 19:05 |
|
IQ-16 на агрегацию фильтр not null не работает
|
|||
---|---|---|---|
#18+
Забыл пароль, Спасибо, Да, очень похоже на баг. Интересно, можно ли как-то обойти? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 10:26 |
|
IQ-16 на агрегацию фильтр not null не работает
|
|||
---|---|---|---|
#18+
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 всё нормально работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 14:12 |
|
IQ-16 на агрегацию фильтр not null не работает
|
|||
---|---|---|---|
#18+
тикет в сап выставили? Что говорят ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2013, 23:33 |
|
IQ-16 на агрегацию фильтр not null не работает
|
|||
---|---|---|---|
#18+
Забыл пароль, Да, спасибо, я все это выяснил с планами и решение с <>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 В результате теперь такая вьюха работает правильно. В техподдержку каких-либо разработчиков ПО я ни разу не обращался, тикета нет )) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2013, 11:01 |
|
|
start [/forum/topic.php?fid=55&fpage=10&tid=2009906]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
72ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 423ms |
0 / 0 |