我正在尝试使用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页面看到了这个解决方案但由于某种原因我一直收到这个错误..有人可以帮忙吗?谢谢!
答案 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}}