【问题标题】:Select from more than one table mysql从多个表中选择mysql
【发布时间】:2016-03-14 15:12:13
【问题描述】:

我有一个包含学生、科目和条目表的考试数据库。 我正在尝试使用 OCR 考试委员会生成所有条目的列表,其中显示学生的姓名以及学生参加的考试的科目名称和入学级别。我知道我需要包含 WHERE 命令,但也知道我做错了...

这是我的代码:

SELECT first_name, last_name, subject_name, level_of_entry
  FROM students, subjects
 WHERE exam_board = 'OCR';

【问题讨论】:

  • 你少了一点。
  • 不。仍然失踪。这是一个有代表性的数据集和一个相应的期望结果。
  • 似乎插入学生的内容已通过 MS office 或类似工具粘贴。引号是……嗯,不对。

标签: mysql sql select where


【解决方案1】:

首先,在加入表格时,您需要指定什么关系。

其次,避免使用隐式连接语法(逗号分隔)并使用正确的连接语法。

第三,这个帖子不就是:https://stackoverflow.com/questions/35991271/how-do-i-create-a-script-to-show-all-people-taking-the-ocr-exam-mysql吗?为什么要发两个帖子。

任何方式,您都需要将这三个表连接在一起:

SELECT students.first_name,students.last_name,subjects.subject_name,subjects.level_of_entry
FROM students
INNER JOIN entries
 ON(students.student_id = entries.student_id)
INNER JOIN subjects
 ON(entries.subject_id = subjects.subject_id)
WHERE subjects.exam_board='OCR';

另外,正如@JoachimIsaksson 所提到的,您在学生表中的插入不正确,将 ` 更改为 ' ,最后在将列与字符串进行比较时,使用 '' 就像在我的 where 子句中一样。

【讨论】:

  • @user5962847 抱歉错字,拼写为主题而不是主题。立即尝试
【解决方案2】:

替换

SELECT first_name,last_name,subject_name,level_of_entry
FROM students,subjects
WHERE exam_board=OCR;

SELECT first_name,last_name,subject_name,level_of_entry
FROM students join entries on
  students.student_id = entries.student_id
              join subjects on
    entries.subject_id =  subjects.subject_id
WHERE exam_board='OCR';

【讨论】:

  • 当您在 WHERE 子句中引用最右边的表时,LEFT JOIN 有点不必要,有效地使其成为内连接。
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 2016-08-08
  • 2011-11-25
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多