首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接4个MySQL表

连接4个MySQL表
EN

Stack Overflow用户
提问于 2013-12-15 08:50:17
回答 4查看 62关注 0票数 2

我有以下表格:

代码语言:javascript
复制
`course`:
`id` (PK)
`userid` (FK)
`fromtimeid` (FK) --> `timetable_time`
`tilltimeid` (FK) --> `timetable_time`

`course_timetable`:
`id` (PK)
`courseid` (FK) --> `course`
`timetable_dayid` (FK) --> `timetable_day`

`timetable_time`:
`id` (PK)
`value`

`timetable_day`:
`id` (PK)
`value`

我想给$userid提供数据,并希望得到包含该用户时间表的数组。

我试着工作的想法是:

  1. 获取用户标识。
  2. 获取与useridfromtimeidtilltimeid相对应的课程
  3. 加入timetable_time表以获取从#2获取的fromtimeidtilltimeid的值。
  4. 通过将course_timetablecourse_timetable.courseid连接到course.id (从#3获取)从course.id表中获取天数
  5. 加入timetable_day并得到天的值。

我尝试过执行以下操作,但它引发了一个错误:

代码语言:javascript
复制
SELECT `course`.*, `course_timetable`.*
FROM (`course`)
JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id`
JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid`
JOIN `timetable_time` ON `timetable_time`.`id` = `course`.`fromtimeid`
JOIN `timetable_time` ON `tiemtable_time`.`id` = `course`.`tilltimeid` 
WHERE `userid` = $id

显示的错误是:

代码语言:javascript
复制
Error Number: 1066

Not unique table/alias: 'timetable_time'

SELECT `course`.*, `course_timetable`.* FROM (`course`) JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id` JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid` JOIN `timetable_time` ON `timetable_time`.`id` = `course`.`fromtimeid` JOIN `timetable_time` ON `timetable_time`.`id` = `course`.`tilltimeid` WHERE `teacherid` = 0

我哪里出问题了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-15 09:00:44

由于要多次使用同一个表,因此需要给它们提供别名以消除它们的歧义:

代码语言:javascript
复制
JOIN `timetable_time` t1 ON t1.`id` = `course`.`fromtimeid`
JOIN `timetable_time` t2 ON t2.`id` = `course`.`tilltimeid`
票数 2
EN

Stack Overflow用户

发布于 2013-12-15 09:00:37

你要加入timetable_time两次。

首先,我想知道这是否有必要。但是,如果是这样的话,您至少需要给其中一个别名:

JOIN SomeTimable AS SomeTableAlias ON ...

此外,在引用特定表时,需要使用别名。所以在SELECT和ON子句中使用别名。

(顺便说一句。在对表进行别名时,可以省略关键字AS。)

票数 2
EN

Stack Overflow用户

发布于 2013-12-15 09:00:40

您的问题是,您要两次加入表timetable_time并使用相同的名称。将其改为类似于:

代码语言:javascript
复制
SELECT `course`.*, `course_timetable`.*
FROM (`course`)
JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id`
JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid`
JOIN `timetable_time` t1 ON t1.`id` = `course`.`fromtimeid`
JOIN `timetable_time` t2 ON t2.`id` = `course`.`tilltimeid` WHERE `userid` = $id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20592800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档