MySQL查询失败

时间:2011-10-22 14:16:52

标签: mysql database join

这个MySQL查询失败了,我无法弄清楚原因。如果您需要更多信息,请联系我们。


新查询和新错误

select * 
from 
(select 
classId as `Class ID`, mjla_db.StudentRecordTable2.studentId as `Student ID`, quizId as `Quiz ID`, quizGrade as `Quiz Grade`, mjla_db.StudentTable2.lastName, mjla_db.StudentTable2.firstName 
from mjla_db.StudentRecordTable2, mjla_db.StudentTable2 
where (mjla_db.StudentRecordTable2.studentId=mjla_db.StudentTable2.studentId)) 
as A 
where classId 
in (select mjla_db.ClassTable2.classId 
from mjla_db.ClassTable2 
where mjla_db.ClassTable2.teacherId='T1');

ERROR 1054 (42S22): Unknown column 'classId' in 'IN/ALL/ANY subquery'

select * 
from 
    (select 
        classId as 'Class ID',
        studentId as 'Student ID',
        quizId as 'Quiz ID',
        quizGrade as 'Quiz Grade',
        mjla_db.StudentTable2.lastName,
        mjla_db.StudentTable2.firstName
    from
        mjla_db.StudentRecordTable2,
        mjla_db.StudentTable2
    where
        (mjla_db.StudentRecordTable2.studentId = mjla_db.StudentTable2.studentId)
    ) as A
where
    A.classId in 
        (select
            mjla_db.ClassTable2.classId
        from
            mjla_db.ClassTable2
        where
            mjla_db.ClassTable2.teacherId='T1'
        );

describe StudentRecordTable2;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| classId   | varchar(20) | NO   | MUL | NULL    |       |
| studentId | varchar(20) | NO   | MUL | NULL    |       |
| quizGrade | tinyint(4)  | YES  |     | NULL    |       |
| quizId    | int(11)     | NO   | MUL | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

describe ClassTable2;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| classId       | varchar(20) | NO   | PRI | NULL    |       |
| className     | varchar(10) | NO   |     | NULL    |       |
| classSection  | varchar(5)  | NO   |     | NULL    |       |
| classSemester | varchar(2)  | NO   |     | NULL    |       |
| classYear     | varchar(4)  | NO   |     | NULL    |       |
| teacherId     | varchar(20) | NO   |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

describe StudentTable2;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| studentId       | varchar(20) | NO   | PRI | NULL    |       |
| lastName        | varchar(45) | NO   |     | NULL    |       |
| firstName       | varchar(45) | NO   |     | NULL    |       |
| studentPassword | varchar(32) | NO   |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

3 个答案:

答案 0 :(得分:1)

由于您从StudentRecordTable2StudentTable2中进行选择,您不能只执行SELECT studentId,因为在两个表中都使用了这个列名,而且mysql不知道你是哪一个想。您需要指定所需的studentId表,方法是在表后添加表名,就像稍后在查询中所做的那样。例如mjla_db.StudentTable2.studentId

答案 1 :(得分:1)

我认为您需要使用bactick / backquote(`)字符来引用列名,而不是单引号字符(')。

此外,您在第一个子查询中将classId别名为Class ID,但随后在外部where子句中引用A.classId。

答案 2 :(得分:0)

select * from (select ...)语法不正确。 select * from必须后跟表名。我想你只需要摆脱第一个,只需使用括号内的查询。

我不确定您是否可以在AS使用的标识符中使用空格。