如何在 Oracle 中 select 记录范围

How to select range of records in Oracle

我正在尝试 select 使用 SQL 查询的一系列记录:

SELECT COMPANY_ID as SEQ_NO, NULL URBAN_CODE
FROM (SELECT COMPANY_ID as SEQ_NO, NULL URBAN_CODE, ROWNUM num from COMPANY_TABLE)
WHERE num > 1 and num < 9

我不断收到的错误是 "URBAN_CODE":标识符无效

我从几个 SO 页面看到了这个解决方案,但出于某种原因,我一直收到这个错误。有人可以帮忙吗?谢谢!

如果没记错你需要在外部查询中使用alias name

您不能在外部查询中使用 company_Id,因为您在 sub-select 中给出了 alias name,您需要使用它。

SELECT SEQ_NO, URBAN_CODE
FROM (SELECT COMPANY_ID as SEQ_NO, NULL as URBAN_CODE, ROWNUM num from COMPANY_TABLE)
WHERE num > 1 and num < 9

你展示的代码不能抱怨URBAN_CODE。但它会给你 ORA-00904: "COMPANY_ID": invalid identifier,所以也许你已经在你的 post.

中交换了列名

您在内联视图中为 COMPANY_ID 列设置了别名,但仍试图在外部查询中引用原始的未使用别名的名称。您可以使用别名,也可以稍后定义它:

SELECT COMPANY_ID as SEQ_NO, NULL URBAN_CODE
FROM (SELECT COMPANY_ID, ROWNUM num from COMPANY_TABLE)
WHERE num > 1 and num < 9

SELECT SEQ_NO, URBAN_CODE
FROM (SELECT COMPANY_ID as SEQ_NO, NULL URBAN_CODE, ROWNUM num from COMPANY_TABLE)
WHERE num > 1 and num < 9

如果 URBAN_CODE 始终为 null,那么在内联视图中使用 URBAN_CODE 也没有多大意义;并没有真正受到伤害,但是您没有在外部查询中使用生成的(空)值。

您还在使用 ROWNUM 而未进行任何排序,因此您的结果将不确定。你真的需要另一层内联视图:

SELECT COMPANY_ID as SEQ_NO, NULL as URBAN_CODE
FROM (
  SELECT COMPANY_ID, ROWNUM num
  FROM (
    SELECT COMPANY_ID
    FROM COMPANY_TABLE
    ORDER BY COMPANY_ID -- or whatever order you want to impose
  )
)
WHERE num > 1 and num < 9;