我的表结构如下:
`user`
id(PK)
name
`course`
id(PK)
classid(FK) --> class.id
teacherid(FK) --> user.id
starttimeid(FK) --> timetable_time.id
endtimeid(FK) --> timetable_time.id
name
`class`
id(PK)
name
`course_timetableday`
id(PK)
timetable_dayid(FK) --> timetable_day.id
`timetable_day`
id(PK)
value
`timetable_time`
id(PK)
value我想展示一个特定teacherid的所有课程以及它的类名timetable_day.value和timetable_time.value(starttimeid和endtimetimeid)。
我尝试了以下查询:
SELECT `course`.*, `class`.`name`, `timetable_day`.*, `course_timetable`.*, `timetable_time`.* FROM (`course`) JOIN `class` ON `class`.`id` = `course`.`classid` JOIN `user` ON `user`.`id` = `course`.`teacherid` JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id` JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid` JOIN `timetable_time` AS tt1 ON `tt1`.`id` = `course`.`starttimeid` JOIN `timetable_time` AS tt2 ON `tt2`.`id` = `course`.`endtimeid` WHERE `user`.`id` = 0这给我带来了以下错误(尽管如此,该表还是存在的。我尝试过来自同一个表的其他查询,它们都能工作):
Unknown table 'timetable_time'发布于 2013-12-21 18:07:40
由于您已经将表`timetable_time别名为tt1,再次将其命名为tt2,所以需要修改select语句以使用tt1或tt2,如下所示:
SELECT `course`.*, ... , tt1.* FROM ...就像这样:
SELECT `course`.*, `class`.`name`, `timetable_day`.*, `course_timetable`.*, tt1.*
FROM (`course`)
JOIN `class`
ON `class`.`id` = `course`.`classid`
JOIN `user`
ON `user`.`id` = `course`.`teacherid`
JOIN `course_timetable`
ON `course_timetable`.`courseid` = `course`.`id`
JOIN `timetable_day`
ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid`
JOIN `timetable_time` AS tt1
ON `tt1`.`id` = `course`.`starttimeid`
JOIN `timetable_time` AS tt2
ON `tt2`.`id` = `course`.`endtimeid`
WHERE `user`.`id` = $i注意:
除非表名和字段名是保留的单词,否则不需要将表名和字段名括在勾号中。因此,您的查询可以读到:SELECT course.*, ...
发布于 2013-12-23 11:45:02
您的表结构与您的查询不匹配,结构中有一个表'course_timetableday‘,但是在您的查询中有一个名为'courseid’的表,它显然有一个名为‘courseid’的列。我以为这张表名为“”。以下是查询,请参阅下面的备注:
SELECT course.*, class.`name` AS classname, timetable_day.value, tt1.value AS starttime, tt2.value AS endtime
FROM course
JOIN class ON class.id = course.classid
JOIN user ON user.id = course.teacherid
JOIN course_timetableday ON course_timetableday.courseid = course.id
JOIN timetable_day ON timetable_day.id = course_timetableday.timetable_dayid
JOIN timetable_time AS tt1 ON tt1.id = course.starttimeid
JOIN timetable_time AS tt2 ON tt2.id = course.endtimeid
WHERE user.id = 0;我在class.name上放了一个别名,否则它可能会覆盖course.name (取决于客户端程序/适配器)。出于同样的原因,我还在tt1.value和tt2.value上放置了一个别名。如果您需要从结果中的已连接表中获得ID,则可能还需要对它们进行别名。
如果在结果集中获得重复行,请检查每个课程的course_timetableday表和类表中是否确实只有一个条目。否则,您将为这些表中的每个匹配项获得一个结果行。
https://stackoverflow.com/questions/20721962
复制相似问题