一、問題
今天遇到了一個神奇的問題——表中有資料,但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
這個能正常的查到記錄數。