citus icon indicating copy to clipboard operation
citus copied to clipboard

Adding no-op `WHERE true` in subquery flips result (20 rows → 0) with scalar `ORDER BY … LIMIT` subqueries and `BETWEEN`

Open duerwuyi opened this issue 1 month ago • 0 comments

citus version:

SELECT citus_version();
---Citus 13.2.0 on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit

PG version: 17.6

query:

select  
  *
from 
  (select  
        (select c5 from t1 order by c5 limit 1 offset 2)
           as c_0, 
        (select c11 from t24 order by c11 limit 1 offset 4)
           as c_1, 
        ref_0.c9 as c_2, 
        ref_0.c9 as c_3, 
        (select pg_catalog.min(vkey) from t1)
           as c_7
      from 
        t1 as ref_0
      where true::bool
      order by c_0 desc, c_1 desc, c_2 asc, c_3 asc, c_7 asc) as subq_0
where (((select vkey from t24 order by vkey limit 1 offset 6)
      ) between ((subq_0.c_7)) and (subq_0.c_3)) 

returns 0 rows. but it will return correct after removing where true::bool

select  
  *
from 
  (select  
        (select c5 from t1 order by c5 limit 1 offset 2)
           as c_0, 
        (select c11 from t24 order by c11 limit 1 offset 4)
           as c_1, 
        ref_0.c9 as c_2, 
        ref_0.c9 as c_3, 
        (select pg_catalog.min(vkey) from t1)
           as c_7
      from 
        t1 as ref_0
      --- where true::bool
      order by c_0 desc, c_1 desc, c_2 asc, c_3 asc, c_7 asc) as subq_0
where (((select vkey from t24 order by vkey limit 1 offset 6)
      ) between ((subq_0.c_7)) and (subq_0.c_3)) 

SCHEMA to reproduce:

db_setup.sql

duerwuyi avatar Oct 31 '25 14:10 duerwuyi