mysql - 收到错误 : table doesn't exist

标签 mysql sql

我有 3 列:

  1. 学院 (cname , state , enrollment)
  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

这行得通。但是当我再添加一个 feild 来选择时,它会中断:

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 等时,它会起作用。

我的目标是找到申请人的最高 GPA 低于平均水平的专业,我做了一个有效的查询:

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 中键入连接部分。我希望有一些方法可以跳过必须两次键入连接部分,所以我想出了上面的(错误的)查询。

任何帮助都会很棒。

最佳答案

试试这个:

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 是选择查询的别名,您在初始化它之前在上面的选择查询中使用了它。首先它将执行子查询,然后从那里选择列。并且找不到这张表。

关于mysql - 收到错误 : table doesn't exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994166/

相关文章:

sql - 如果返回超过 1 个 MS SQL,则删除

javascript - 我正在尝试创建几个按钮,每个按钮在 MySQL 中显示不同的数据库,但数据库名称显示为未定义

java - Java 8 中查询结果数据库的最优化方式

php - 为什么我在 PHP 中提交表单后看到空白屏幕?

mysql - 如何维护通过SQOOP下载到Hive的MySQL表之间的关系

php - 如何获取 WooCommerce 中的活跃订阅者列表?

mysql - 复杂的 MySQL 查询求和连接的记录,其中父 ID 和子 ID 相等

sql - Postgres : Get owner of all schemas

sql - 从多个范围查找值的最佳方法

SQL 基本并发