-1

我需要从我的 C# 代码创建对 oracle 数据库的请求,这将为网站上的页面选择行。例如,我想为第二页获取 100 到 200 的行。我找到了一些真正有效的代码

SELECT * FROM
(
   SELECT a.*, rownum r__
   FROM
   (
      SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%'
      ORDER BY OrderDate DESC, ShippingDate DESC
   ) a
   WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)

它有效,我可以在更改此块内部时使用它

SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%'
ORDER BY OrderDate DESC, ShippingDate DESC

但它是如何工作的?我无法理解。我熟悉 SQL 请求,但什么是

SELECT a.*, rownum r__  

是什么

 ) a

FROM 换行后?

你能这么好心地解释一下这个包装吗?

4

1 回答 1

1

select a.*, rownum -> Select all records from table/table alias a, with rownumber, 这样你就可以选择一个子集。

(SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' ORDER BY OrderDate DESC, ShippingDate DESC)

创建“a”作为表别名,允许您将其视为外部选择表中的表。

请注意,选择 * 被认为是不好的做法,因为更改表结构可能会破坏您的代码。

于 2013-04-22T17:36:27.023 回答