oracle 10g sql子句编译错误
Posted
技术标签:
【中文标题】oracle 10g sql子句编译错误【英文标题】:oracle 10g sql with clause compilation error 【发布时间】:2010-10-25 19:53:57 【问题描述】:编译错误说“mm”和“cc”是无效标识符!
with m as (
select instructor,
count(*) as c
from class
group by instructor),
mm as (
select max(m.c) as cc
from m)
select m.instructor
from m
where m.c = mm.cc;
【问题讨论】:
您想如何处理领带 - 是否应该显示所有领带? 【参考方案1】:错误是因为mm
是子查询分解 (AKA CTE) 实例的名称,但如您所见:
SELECT m.instructor
FROM m
WHERE m.c = mm.cc;
您尚未将mm
声明为m
实例的JOIN。使用:
WITH m AS (
SELECT instructor,
COUNT(*) as c
FROM CLASS
GROUP BY instructor),
mm AS (
SELECT MAX(m.c) as cc
FROM m)
SELECT m.instructor
FROM m
JOIN mm ON mm.cc = m.c
【讨论】:
你太棒了,我不知道什么是子查询分解(又名 cte)实例! @baboonWorksFine:WITH
语法在 Oracle 中称为“子查询分解”,在 SQL Server 中称为“公用表表达式”(AKA CTE)...【参考方案2】:
我想你是想找一位上课最多的老师。
你不能用吗
Select m.instructor FROM (select instructor, count(*) as c from class group by instructor order by 2 desc) m where rownum = 1
【讨论】:
这只会返回 1 行,不是吗,如果一个以上的老师教的课最多怎么办? 您可以尝试从班级组中选择教师,count(*) 按教师 HAVING count(*) = (SELECT max(c) FROM (选择教师,count(*) as c from class group by教练)d)以上是关于oracle 10g sql子句编译错误的主要内容,如果未能解决你的问题,请参考以下文章
SQL 编译错误:无法评估不受支持的子查询类型 - SELECT 子句中的函数调用
在 Oracle PL/SQL 中创建触发器时如何解决“编译错误成功”错误?