Sql 如何在Oracle11.g中正确地选择中间的一些行?

Sql 如何在Oracle11.g中正确地选择中间的一些行?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,现在我使用的代码是: SELECT * FROM ( SELECT product.*, rownum AS n FROM product ) WHERE n >= 4 AND n < 4+2; 这将从表product中选择2行,开始按包含的第4行计数 它工作正常,但最终的选择也会显示一列rownum。 目前我唯一的解决方法是在主选择中手动键入我想要的列,但是如果我不知道列的名称和数量呢? 有更好的方法吗? 非常感谢如果您不想写入所有列名,那么您需要再次使用PK将查询与表连

现在我使用的代码是:

SELECT *
FROM (
  SELECT product.*, rownum AS n
  FROM product
) WHERE n >= 4 AND n < 4+2;
这将从表product中选择2行,开始按包含的第4行计数

它工作正常,但最终的选择也会显示一列rownum。 目前我唯一的解决方法是在主选择中手动键入我想要的列,但是如果我不知道列的名称和数量呢? 有更好的方法吗?
非常感谢

如果您不想写入所有列名,那么您需要再次使用PK将查询与表连接起来。因为我不认为在Oracle11g中除了手动写入所有列名之外,还有其他方法可以从最终结果中排除rn

SELECT T.* FROM
(SELECT PK_COLUMN
FROM (
  SELECT product.PK_COLUMN, rownum AS n
  FROM product
) WHERE n >= 4 AND n < 4+2) P
JOIN T ON T.PK_COLUMN = P.PK_COLUMN

干杯

我想知道的是,您没有使用任何ORDERBY子句。在不使用ORDERBY子句的情况下,可以按任何顺序返回行。因此,基本上您的查询类似于-

SELECT product.*
FROM product
WHERE rownum <= 3;

在Oracle中,rownum不是指表中的行数,而是指已选择的行数。所以rownum>=4永远不会工作,因为从来没有第1行、第2行和第3行selected@DavidM.Casas,你完全正确。所以基本上你的查询就是rownum,但是如果我想跳过前n个选中的,该怎么办呢?我希望我的选择跳到第四个有效选择,然后选择第四行和第五行。它的工作方式与我在主帖子中发布的方式相同,但我不知道是否有更好的方式,正如我已经告诉过你的那样,在你有订单条款之前,没有第四行或第五行。一旦你有了这个答案,你可以参考Tejash的答案。谢谢你的帮助,如果我的措辞不正确,很抱歉,确实Tejash的答案是我想要的是的,明确列出外部选择中的所有列是你唯一的选择。在生产代码中使用select*不仅仅是一个特殊的查询,无论如何都不是一种好的编码方式。这就是我想要的答案!!我很难过,在甲骨文11中没有更容易做到这一点的方法。非常感谢你