Jos*_*osh 5 sql oracle coldfusion
我在ColdFusion中编写一个函数,它返回与用户输入匹配的前几个记录,以及整个数据库中匹配记录的总数.该功能将用于提供自动完成功能,因此速度/效率是其最关注的问题.例如,如果函数接收输入"bl"
,则可能返回{sampleMatches:["blue", "blade", "blunt"], totalMatches:5000}
我尝试在单个查询中执行此操作以实现速度目的,最终得到的内容如下所示:
select record, count(*) over ()
from table
where criteria like :criteria
and rownum <= :desiredCount
Run Code Online (Sandbox Code Playgroud)
此解决方案的问题是count(*) over ()
始终返回值:desiredCount
.我在这里看到了一个类似的问题,但是我的应用程序无权创建临时表.那么有一种方法可以在一个查询中解决我的问题吗?有没有更好的方法来解决它?谢谢!
我正在写这篇文章,所以你绝对不得不花时间,但我相信使用以下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
Run Code Online (Sandbox Code Playgroud)