这个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)
答案 0 :(得分:1)
由于您从StudentRecordTable2
和StudentTable2
中进行选择,您不能只执行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
使用的标识符中使用空格。