是否存在根据记录计数条件从 Sybase table 检索数据的查询
Is there a query to retrieve data from Sybase table on record count condition
我有一种情况需要根据特定条件select 来自 Sybase table 的记录
- 记录需要分批提取。如果总计数为 2000,那么我需要在第一批中提取 500,在下一批中提取 500,直到达到 2000 条记录计数。
- 我使用了限制条件,但它给出的语法不正确
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 行)数据集用于实验。
我有一种情况需要根据特定条件select 来自 Sybase table 的记录
- 记录需要分批提取。如果总计数为 2000,那么我需要在第一批中提取 500,在下一批中提取 500,直到达到 2000 条记录计数。
- 我使用了限制条件,但它给出的语法不正确
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 行)数据集用于实验。