2010-10-25 88 views
1

编译错误说“mm”和“cc”是无效标识符!oracle 10g sql与子句编译错误

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

你想怎么处理关系 - 应该所有的关系显示? – 2010-10-25 20:10:56

回答

5

这个错误是因为mm是子查询分解(AKA CTE)实例的名称,但你可以看到:

SELECT m.instructor 
FROM m 
WHERE m.c = mm.cc; 

您还没有宣布mm为连接到m实例。使用:

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 
+0

你很棒,我不知道什么是子查询保理(aka cte)实例! – Rn2dy 2010-10-25 20:06:52

+0

@baboonWorksFine:在Oracle中'WITH'语法被称为“子查询因子分类”,在SQL Server中被称为“公用表表达式分解”(Common Query Table,简称AKA CTE)... – 2010-10-25 20:07:48

0

我认为你正在试图获得大部分课程的指导。

你能不能用

Select m.instructor FROM (select instructor, count(*) as c from class group by instructor order by 2 desc) m where rownum = 1 
+0

这只会返回唯一的一行,不是吗?有不止一位讲师教授最多的课程? – Rn2dy 2010-10-25 20:08:40

+0

你可以尝试选择教师,由教师计数(\ *)从班级组的教师HAVING计数(\ *)=(SELECT max(c)FROM(选择教练,计数(\ *) – DJIDave 2010-10-25 20:15:33

+0

很酷。我认为这是正确的 – Rn2dy 2010-10-26 05:05:53