无法从 SQLPLUS 中的 select 语句创建的表中选择数据
Posted
技术标签:
【中文标题】无法从 SQLPLUS 中的 select 语句创建的表中选择数据【英文标题】:FAIL to SELECT data from table that created by select statement in SQLPLUS 【发布时间】:2014-10-15 17:09:25 【问题描述】:这是我的sql语句
它用于“查找每个职位的平均工资。显示职位和平均工资金额为3000或更高的人的数量。”
CREATE TABLE avgSal AS (
SELECT job, AVG(sal) AS "sal" FROM Emp GROUP BY job);
SELECT * FROM avgSal WHERE sal>3000;
然后sqlplus说
ORA-00904: "SAL": invalid identifier
我进入第二条sql语句后
有人可以帮我吗? /(T_T)\
这是我第一次使用 *** (-,-)/
【问题讨论】:
也许检查你的字段的大小写,有时它会有所不同。 欢迎来到***! :) 首先这似乎是个坏主意……如果 EMP 表被更新会发生什么?您也必须更新此表吗?为什么不把它做成一个临时表,当你只需要并且总是有更新的数据时可以查询呢?试着在你的专栏上加反引号 【参考方案1】:您引用了列名"sal"
,因此它区分大小写。
引用时必须引用该列:
SELECT *
FROM avgSal
WHERE "sal" > 3000;
通常最好避免使用带引号的标识符。
有关标识符的更多详细信息可以在手册中找到:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements008.htm#SQLRF00223
但是你真的不需要创建一个表来实现你想要的:
select *
from (
SELECT job,
avg(sal) AS avg_sal
FROM Emp
GROUP BY job
) t
where avg_sal > 3000;
另一种选择是使用公用表表达式:
with avgSal as (
SELECT job,
avg(sal) AS avg_salary
FROM Emp
GROUP BY job
)
select *
form avgSal
where avg_salary > 3000;
【讨论】:
这里唯一需要注意的是 mysql 不支持with
运算符,因为这就是 OP 正在使用的......但不管我 +1 :)
@JohnRuddell:错误消息清楚地表明 OP 正在使用 Oracle。
哦,我的糟糕,我什至没看到...然后是 nvm :)
非常感谢。 (^v^)/ 我希望有一天我能投票给你的答案。以上是关于无法从 SQLPLUS 中的 select 语句创建的表中选择数据的主要内容,如果未能解决你的问题,请参考以下文章
Oracle数据库的sqlplus可以直接执行SQL语句吗?