在Oracle 中 in的个数不能超过1000,但是这个语句中最多只能29个,大神求解

select regexp_substr((select visavis from empassess where id = 151),
                             '[^,]+',
                             1,
                             level) 
          from dual

        connect by regexp_substr((select visavis
                                   from empassess
                                  where id = 151),
                                 '[^,]+',
                                 1,
                                 level) is not null)
 order by id

在这语句中是有31条数据;图片说明

select count(id)
  from hrmresource
 where id in
       (select regexp_substr((select visavis from empassess where id = 151),
                             '[^,]+',
                             1,
                             level)
          from dual

        connect by regexp_substr((select visavis
                                   from empassess
                                  where id = 151),
                                 '[^,]+',
                                 1,
                                 level) is not null)

图片说明

但是这个只有29条,

前提说明一下,这个hrmresource 表中存在这个31个的ID

所以求助这个是什么原因导致

29说的是嵌套的层数。因为数据库查询不像编程语言可以递归调用,都需要展开的,所以这个层数在不同数据库里都不是很大,access是8层,sql server是16层,oracle30层已经不小了。

是不是id有重复导致的呢

我遇到过这个现象,不只对你是否有帮助,实表100条记录,语句查询90条记录,感觉很不可能,oracle出问题了?
最后发现是index信息不及时造成,删掉走的那个索引重建就是100条数据了。
你或者加个 select /*+ no_index(t1 idx_t1)*/ * from t1 where n=1;看看结果