是否存在查询以按记录计数条件从Sybase表检索数据

时间:2019-08-23 13:10:25

标签: python sybase-ase

我遇到一种情况,我需要根据特定条件从Sybase表中选择记录

  1. 记录需要批量提取。如果总数是2000,那么我需要在第一批中提取500,在下一批中提取500,直到达到2000个记录数。
  2. 我使用了极限条件,但语法不正确
select top 2 * 
from CERD_CORPORATE..BOOK 
where id_bo_book in('5330') 
limit(2,3)

2 个答案:

答案 0 :(得分:0)

您不能为LIMIT条件使用范围,但是可以为此使用OFFSET关键字:

SELECT top 2 * FROM CERD_CORPORATE.BOOK 
WHERE id_bo_book in('5330') 
LIMIT 2 OFFSET 1;

答案 1 :(得分:0)

在ASE 12.5.1及更高版本上,可以使用“ SQL派生表”或“内联视图”完成此操作。该查询要求每一行都有唯一的键,以便表可以与自身连接,并且可以返回键值小于要连接的行的行数。这样会给出一个单调递增的数字,用于指定极限和偏移量。

limit和offset的等效项是与x.rowcounter比较的值。

select
        x.rowcounter,
        x.error,
        x.severity
    from
        (
            select
                    t1.error,
                    t1.severity,
                    t1.description,
                    count(t2.error) as rowcounter
                from
                    master..sysmessages t1,
                    master..sysmessages t2
                where
                    t1.error >= t2.error
                group by
                    t1.error,
                    t1.severity,
                    t1.description
        ) x
    where
        x.rowcounter >= 50
    and x.rowcounter < 100

SQL派生表最早可用于Sybase ASE 12.5.1 SQL Derived Tables

示例中使用master..sysmessages提供了一个合理的(10,000行)数据集进行实验。