Correlated subqueries in filters comparing count(*) to 0 do not work if the subquery contains a local filter that removes all its elements

Details

Detail name Value
Changelog Number 5096
Type Bug
Status Resolved
Affected Versions EXASOL 6.0.0, EXASolution 5.0.0, Exasol 6.1.0, Exasol 6.2.0, Exasol 7.0.0
Fix Versions Exasol 7.1.1, Exasol 7.0.13
Resolution Date 2021-09-14

Problem

queries with correlated filters that use count and compare these counts to 0 do not work.

Workaround

Put the filter in the select list and wrap another SELECT to filter the desired rows:

For example.

with 
sess as (select 100 as id from dual union all select 200 as id from dual ),
sq   as (select 100 as id , null as err from dual )
select sess.* from sess
where  0=(select count(*) from sq where sq.id=sess.id and err is not null);

should be rewritten as

with 
sess as (select 100 as id from dual union all select 200 as id from dual ),
sq   as (select 100 as id , null as err from dual )
select id from (
select sess.*, 0 = (select count(*) from sq where sq.id=sess.id and err is not null) as f
from sess
)
where f;