MYSQL QUERY加入多个表

时间:2014-02-01 12:35:54

标签: php mysql sql

我正在寻找可以连接多个表的单个查询。 查询如下  `

SELECT
a.name as module_name,
a.id,
b.id as subject_id,
b.SUBJECT_name,
c.id as course_id,
c.course_name,
d.id as cordinator_id,
d.cordinator_name
FROM module_table a
LEFT JOIN subject_table b ON b.id = a.subject_id
LEFT JOIN course_table c ON c.id = a.course_id
LEFT JOIN cordinator_table d ON d.id = a.cordinator_ids
WHERE a.id = $somevalue
ORDER BY a.id DESC

`

以上查询产生错误,当我连接两个表时,它显示正确

SELECT
a.name as module_name,
a.id,
b.id as subject_id,
b.SUBJECT_name
FROM module_table a
LEFT JOIN subject_table b ON b.id = a.subject_id
WHERE a.id = $somevalue
ORDER BY a.id DESC`

第一个表包含主题和课程表的所有外键,进一步的主题表连接到具有公共id列的协调器表。我想要在模块表中给出的id的相应名称..

最后一个表是我想从中收集所需数据的查询结果 我的表结构在下面

模块只能包括在一个主题和主题中,包括在课程中 每个主题都可以包含任何我认为是JSON值的裁判员

-----------------------------------------------------------------------
MODULE TABLE
_____________________________________________________
id   |   subject_id  |   course_id |  cordinator_id |  name


-----------------------------------------------------------------------
COURSE TABLE
__________________
id  |  course_name

-----------------------------------------------------------------------
SUBJECT TABLE
_________________________________________________
id    | course_id  |  cordinator_id |  SUBJECT_name


-----------------------------------------------------------------------
CORDINATOR TABLE
______________________________________
id  |  cordinator_ids |  cordinator_name


Result TABLE
___________________________________________________________________________________________
id  | module_name | subject_id | subject_name |  course_id  | course_name  | cordinator_ids 

我可以使用LEFT Join成功连接两个表,但第三个报告错误。

1 个答案:

答案 0 :(得分:2)

问题是你有一些拼写错误,忘了加入course_table。

这是正确的查询:

SELECT
a.name as module_name,
a.id,
b.id as subject_id,
b.SUBJECT_name,
c.id as course_id,
c.course_name,
d.id as cordinator_id,
d.cordinator_name

FROM module_table a
LEFT JOIN subject_table b ON b.id = a.subject_id
LEFT JOIN course_table c ON c.id = a.course_id
LEFT JOIN cordinator_table d ON d.id = a.cordinator_id
WHERE a.id = $somevalue
ORDER BY a.id DESC

在这一行:

b.SUBJECT_name,

你必须在表subject_table架构中放置大写的“SUBJECT_name”。

您的查询缺少此JOIN以允许您选择course_table字段:

LEFT JOIN course_table c ON c.id = a.course_id