我是新手,因此我对它的工作方式一无所知,但我对此有错误:
<meta http-equiv="cache-control" content="no-cache" />
这会出现错误
错误代码:1054。'on clause'中的未知列'students.student_id'
即使这是列的名称,它应该工作吗?
我要做的是显示所有学生的所有参赛作品,每个学生都有多个参赛作品,并展示主题。
答案 0 :(得分:0)
尝试使用类似的东西:
SELECT students.last_name, students.first_name, subjects.subject_name, entries.date_of_exam
FROM students
INNER JOIN entries ON entries.student_id = students.student_id
INNER JOIN subjects ON subjects.subject_id = entries.subject_id
WHERE students.student_id IN (SELECT student_id FROM entries GROUP BY student_id HAVING COUNT(entries.subject_id ) > 1)
ORDER BY last_name;
答案 1 :(得分:0)
您不应在from
子句中使用逗号单独的表列表,然后添加join
。逗号分隔列表将生成所有三个表中所有记录的完整笛卡尔积。这只会爆炸组合的数量并将输出中与事物无关的内容联系起来。
join
部分也很奇怪,因为您已经有entries
然后再次加入它......您的查询中没有任何内容表明您确实需要三次该表。
此外,加入条件students.last_name IN (SELECT students.student_id FROM students)
毫无意义,因为它要求学生的姓名与其他(或同一)学生的ID相匹配。是否有可能被称为007
的学生?
可能你只是这样一个查询,它接收每个学生的所有信息,然后加入一个查询,选择每个学生的数字条目,最后过滤这个计数大于1的情况:
SELECT s.last_name,
s.first_name,
s.subject_name,
e.date_of_exam
FROM students s
JOIN entries e
ON s.student_id = e.student_id
JOIN subjects s
ON e.subject_id = s.subject_id
JOIN (SELECT student_id, count(*) entry_count
FROM entries
GROUP BY student_id) cnt
ON cnt.student_id = s.student_id
WHERE cnt.entry_count > 1
ORDER BY 1, 2, 3, 4;