0

我有 2 张桌子 - 学生,考试

学生表架构:

id  Name  Course
1   Kavi   Dr.
2   Priya  Engg.

考试表架构:

Examid Student_id  Exam Date
1        1          22-03-2014
2        2          23-04-2014
3        1          24-04-2014

我的要求是,我需要加入这两个表,以便我可以访问该表中的所有列。到目前为止,我已经尝试使用 Innerjoin 进行查询,但我得到的结果是

id  Name  Course
1   Kavi   Dr.
2   Priya  Engg.
1   1      22-03-2014
2   2      23-04-2014

但我需要它,

id Name Course Exam Date
1  Kavi  Dr.    22-03-2014
1  Kavi  Dr.    24-04-2014
2  Priya Engg.  23-04-2014

请帮忙!

编辑:

SELECT *
FROM STUDENT S INNER JOIN
     EXAM E
     ON S.id=E.Student_id 
4

6 回答 6

1

我会给你查询,但首先你应该花一点时间来理解 select 语句是如何工作的。

当您运行一个 select 语句时,您可以将其想象为定义一个完全临时的表,该表仅在您查找时存在片刻。这更好地称为您的查询结果。

您选择的列列表实际上成为新表的列。“FROM”决定使用哪些表来映射这些列。“WHERE”和“HAVING”子句决定引擎在确定要包含的行时应该使用哪些规则。

那么,您希望结果中有哪些列?

  • 学生卡
  • 学生姓名
  • 学生课程
  • 考试日期

您正在从学生表和考试表中进行选择,但您希望根据学生 ID “合并”行(这是 JOIN 的用武之地——您应该查看这个以更好地了解 JOIN 的工作原理)

最后,听起来你想要一切,所以没有 WHERE / HAVING 子句。

因此,您的查询应如下所示:

SELECT student.id, student.Name, student.Course, exam.Date
  FROM student
  JOIN exam ON student.id = exam.Student_id

现在,请注意,您应该为列保持一致的命名结构。我建议您始终以小写字母开头(因此它是 student.course),并且我个人始终避免在数据库定义中使用大写字母。至少,以大写字母开头的事物通常表示编程领域中的类或对象名称

听起来您对处理重复项感兴趣。您还想查看“DISTINCT”和“GROUP BY”等关键词。

另外......您在提问时需要提供更多信息。解释你所尝试的。以有条理的方式解释所有要求和目标。你明白了。

于 2013-09-15T16:12:13.757 回答
0
SELECT
    S.id, S.Name, S.Course, `E.Exam Date`
FROM
    Student S, Exam E
WHERE
    S.id = E.Student_id

我仍然觉得您的表格存在严重的设计缺陷 - 没有表格将课程定义为从中获取课程信息(例如名称)的实体。如果你能够改变它,一些标准化会对你有好处。

于 2013-09-15T16:07:04.643 回答
0

我相信您的查询问题很微妙。查询本身是正确的,所以这就是你想要的:

SELECT *
FROM STUDENT S INNER JOIN
     EXAM E
     ON S.id=E.Student_id 

但是,不知何故,您得到的是 across join而不是inner join. 这可能是因为你真的在执行:

SELECT *
FROM STUDENT S INNER JOIN
     EXAM E

在 MySQL 中,该on子句是可选的,因此您不会收到错误消息。如果是这样,只需添加该on子句即可解决问题。

注意:这可能是由查询中的分号引起的:

SELECT *
FROM STUDENT S INNER JOIN
     EXAM E;
     ON S.id=E.Student_id 
于 2013-09-15T16:14:56.107 回答
0

试试这个查询

SELECT s.*, e.exam_date FROM student_tbl s
JOIN exam_tbl e ON e.student_id = s.id
于 2013-09-15T16:03:26.993 回答
0

试试这个

SELECT st.id,st.name,st.course,ex.date FROM student AS st 
LEFT JOIN exam AS ex ON ex.student_id=st.id
于 2013-09-15T16:04:20.083 回答
0

试试这个查询:

SELECT Student.id ,Student.Name,Student.Course,`Exam.Exam Date`
FROM Student
INNER JOIN EXAM
ON Student.id=EXAM.Student_id;
于 2013-09-15T16:04:42.523 回答