是否存在根据记录计数条件从 Sybase table 检索数据的查询

Is there a query to retrieve data from Sybase table on record count condition

我有一种情况需要根据特定条件select 来自 Sybase table 的记录

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

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

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

在 ASE 12.5.1 及更高版本上,可以使用 "SQL Derived Table" 或 "Inline View" 完成此操作。该查询要求每一行都有一个唯一的键,以便 table 可以与其自身连接,并且可以返回键值小于被连接行的行数。这给出了一个单调递增的数字,用于指定限制和偏移量。

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 行)数据集用于实验。