如何在 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;
我正在尝试 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;