我正在寻找可以连接多个表的单个查询。 查询如下 `
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成功连接两个表,但第三个报告错误。
答案 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