關(guān)于ACCESS中TOP 功能的一個(gè)問題
我一直以為ACCESS的SQL語句與SQL Server差不多,當(dāng)時(shí)也使用 Select top n在ACCESS測(cè)試過,都是成功的,但昨天突然發(fā)現(xiàn)ACCESS中有個(gè)問題:
如果在查詢TOP語句的后面使用Order by,而且Order by字段中有重復(fù)值的話,那么這個(gè)TOP很可能會(huì)失效,
會(huì)返回所有記錄
比如:
Select top 5 from News order by CreateDate
如果CreateDate中有重復(fù)值,那么很有可能會(huì)顯示出所有的記錄來,此TOP功能會(huì)失效的
但如果CreateDate中無重復(fù)值,那么TOP功能還是有效的
因此,在ACCESS中使用TOP功能要注意一下order by的字段是否會(huì)有重復(fù)值,如果象CreateDate是"年-月-日 時(shí):分:秒"的,那基本上問題不大的。
但為了保險(xiǎn)起見,我們也可以采用“加入主鍵”的方式:
Select top 5 from News order by CreateDate desc,id desc
用主鍵作“不可能重復(fù)”的保障就可以防止此問題出現(xiàn)了!!
希望這對(duì)某些朋友有用!
在網(wǎng)上找到一個(gè)相關(guān)的解釋:
JET SQL不是 T-SQL語句。
jet sql 會(huì)返回重復(fù)值,也就是說,一個(gè)表中如果 ORDER BY 的字段都是 0 ,一共有100條記錄,即使你用SELECT TOP 1 來返回記錄,也同樣返回100條記錄,因?yàn)?nbsp;JET DB 無從在這100條記錄里面判斷先后次序,只能返回100條。要解決此問題可以在后面加入一個(gè)主鍵字段