我正在 ColdFusion 中编写一个函数,该函数返回与用户输入匹配的前几条记录,以及整个数据库中匹配记录的总数。该函数将用于提供自动完成功能,因此速度/效率是其最关心的问题。例如,如果函数接收到输入 "bl"
,它可能会返回 {sampleMatches:["blue", "blade", "blunt"], totalMatches:5000}
出于速度目的,我尝试在单个查询中执行此操作,结果如下所示:
select record, count(*) over ()
from table
where criteria like :criteria
and rownum <= :desiredCount
此解决方案的问题在于
count(*) over ()
总是返回 :desiredCount
的值.我看到了一个与我类似的问题 here ,但我的应用程序将无权创建临时表。那么有没有办法在一个查询中解决我的问题?有没有更好的方法来解决它?谢谢!
最佳答案
我把这个写在我的头上,所以你一定要计时,但我相信使用以下 CTE
SQL 语句
WITH q AS (
SELECT record
FROM table
WHERE criteria like :criteria
)
SELECT q1.*, q2.*
FROM q q1
CROSS JOIN (
SELECT COUNT(*) FROM q
) q2
WHERE rownum <= :desiredCount
关于sql - 有效地找到记录的子集以及总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434949/