【问题标题】:getting error : table doesn't exist出现错误:表不存在
【发布时间】:2014-01-08 11:20:59
【问题描述】:

我有 3 列:

  1. 大学(cname ,州,招生)
  2. 学生 (sid , sname , gpa , sizehs )
  3. 应用(sid、cname、major、decision)

我试过这个查询:

select j.major , max(j.gpa)
from (select s.* , a.cname , a.major, a.decision 
        from student s join apply a on s.sid = a.sid and decision = 'y') j
group by major

这行得通。但是当我再添加一个要选择的字段时,它会中断:

select major , sname , max(gpa) , (select avg(gpa) from j) as avg -- trouble
from (select s.* , a.cname , a.major, a.decision 
        from student s join apply a on s.sid = a.sid and decision = 'y') j
group by major
having max(gpa) < avg;

我收到一条错误消息:表 j 不存在。为什么会这样?
如果 j 不存在,那么在我说 j.gpa 等的第一个查询中,它可以工作。

我的目标是找到Majors whose applicant's maximum GPA is below the average,我做了一个有效的查询:

select major , sname , student.sid , gpa , 
    (select round(avg(gpa),5) as avg from student join apply 
        on student.sid = apply.sid and decision='Y') as avg
from student join apply on student.sid = apply.sid and decision='Y'
group by major
having max(gpa) < avg

但在这里,我必须在 selectfrom 中输入连接部分。我希望有一些方法可以跳过两次输入连接部分,所以我想出了上面的(错误的)查询。

任何帮助都会很棒。

【问题讨论】:

  • 首先,你不应该使用 avg 作为字段别名,它是一个函数。其次,给表起别名时应该使用 AS 关键字。添加括号也有帮助。
  • 你试过别名吗?
  • 当mysql解释你的查询时,尤其是这部分:(select avg(gpa) from j)你的j别名不存在
  • j.gpa 等似乎在 select 中工作?那为什么呢?

标签: mysql sql


【解决方案1】:

试试这个:

SELECT major, 
       sname, 
       Max(gpa), 
       Avg(gpa) AS avg_gpa 
FROM   (SELECT s.*, 
               a.cname, 
               a.major, 
               a.decision 
        FROM   student s 
               JOIN apply a 
                 ON s.sid = a.sid 
                    AND a.decision = 'y') j 
GROUP  BY major 
HAVING Max(gpa) < avg_gpa; 

这是因为 j 是 select 查询的别名,并且您在初始化之前在上面的 select 查询中使用了它。首先它将执行子查询,然后从那里选择列。并且找不到此表。

【讨论】:

  • 我已经编辑了我的帖子以反映我尝试这样做的目的。您的代码有效,但这不是我想要的。我的问题是关于为什么别名j 在选择子查询中不起作用。
  • @SomjitNag 也可以看到这个链接forums.devshed.com/mysql-help-4/…
【解决方案2】:

试试这个:

SELECT major, 
       sname, 
       Max(gpa), 
       Avg(gpa) AS avgA 
FROM   (SELECT s.*, 
               a.cname, 
               a.major, 
               a.decision 
        FROM   student s 
               JOIN apply a 
                ON s.sid = a.sid 
                   AND decision = 'y') j 
GROUP  BY major 
HAVING Max(gpa) < avga; 

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 2015-07-14
    • 2016-07-19
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多