如何在Oracle中选择记录范围

时间:2015-03-04 16:44:21

标签: sql oracle range

我正在尝试使用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

我一直得到的错误是&#34; URBAN_CODE&#34;:无效的标识符

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

2 个答案:

答案 0 :(得分:3)

您展示的代码不能抱怨URBAN_CODE。但它会给你ORA-00904: "COMPANY_ID": invalid identifier,所以也许你在帖子中交换了列名。

您在内联视图中对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)值。

您还在使用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;

答案 1 :(得分:2)

如果没有错,您需要在外部查询中使用alias name

您不能在外部查询中使用company_Id,因为您已在alias name中提供sub-select,但您需要使用该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

{{1}}