一、问题

今天遇到了一个神奇的问题——表中有数据,但select count(*)的结果为0。

这个问题最初的表现形式是“查询报表没有分页”。

最开始还以为是java端的问题。后来才发现,查分页的sql语句是返回0的。

随后将该sql语句放到PLSQL里运行,发现也是返回0条。

数据库版本是 Oracle 11.1.0.6。

试了好几个搜索引擎,但网上找不到类似情况。

二、山穷水尽疑无路

首先确认一下该表是否有数据——

select * from mytable

可看到该表(mytable)确实有数据。

随后查询条数,发现该语句返回0条。

select count(*) from mytable

更换count方式,还是返回0条。

select count(1) from mytable

select count(id) from mytable

三、柳暗花明又一村

随后发现加上条件时,能查到条数。

select count(*) from mytable where id<10

难道要写上where才行?

那我要查全表记录数该怎么办?

于是尝试了这种写法做恒真判断,但发现还是返回0条——

select count(*) from mytable where 1=1

看来是被数据库自动优化查询语句了。

又想了一下,干脆改为主键非空判断吧,这个也是恒真的。

select count(*) from mytable where not id is null

这个能正常的查到记录数。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐