MySQL连接 - 'on子句'中的未知列

时间:2016-05-16 08:28:39

标签: mysql sql

我是新手,因此我对它的工作方式一无所知,但我对此有错误:

 <meta http-equiv="cache-control" content="no-cache" />

这会出现错误

  

错误代码:1054。'on clause'中的未知列'students.student_id'

即使这是列的名称,它应该工作吗?

我要做的是显示所有学生的所有参赛作品,每个学生都有多个参赛作品,并展示主题。

2 个答案:

答案 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;