【发布时间】:2019-12-16 23:26:40
【问题描述】:
在下面的 sql 中,我返回表之间的搜索,然后返回已经分页的总数。
返回这个总数的需要是分页
该查询正在使用 sql server。
Sql 服务器:
SELECT
bu.Id as 'BarcoUsuarioId',
Barco_Id as 'BarcoId',
bu.Usuario_Id as 'UsuarioId',
barco.Nome as 'NomeBarco'
into #tmpBarcoUsuario
FROM BARCO_USUARIO AS bu
inner join BARCO as barco on barco.Id = bu.Barco_Id
where bu.Usuario_Id = @usuarioId
declare @totalEmbarcacoes as int = (select count(*) from #tmpBarcoUsuario);
select
BarcoUsuarioId,
BarcoId,
UsuarioId,
NomeBarco,
@totalEmbarcacoes as TotalEmbarcacoes from #tmpBarcoUsuario
order by BarcoId
OFFSET @pageSize *(@pageNumber - 1) ROWS
fetch next @pageSize ROWS ONLY";
但是,在使用 Oracle 数据库时,我遇到了一些困难。
从下面的sql可以看出,我已经在oracle DB中进行了分页查询:
甲骨文:
SELECT *
FROM(
SELECT ROWNUM rnum, b.*
FROM (
SELECT
barcoUser.ID BarcoUsuarioId ,
barcoUser.BARCO_ID BarcoId ,
barcoUser.USARIO_ID UsuarioId ,
barco.NOME NomeBarco
FROM BARCO_USUARIO barcoUser INNER JOIN EMBARCACAO barco ON barco.ID = barcoUser.BARCO_ID
WHERE (barcoUser.USARIO_ID=:usuarioId)ORDER BY BarcoId DESC
)b
)WHERE RNUM between :PageSize * (:PageNumber - 1) AND (:PageSize * :PageNumber)";
但是我将如何返回所有这些已经分页的总数,就像在 sql server 中所做的那样?
【问题讨论】:
-
也许count 像这样:
count(1) over() as TotalEmbarcacoes? -
Oracle (12c+) 确实支持
OFFSET .. ROWS FETCH NEXT .. ROWS ONLY语法,顺便说一句。