[英]Sql Query Using Joins
我有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
我的要求是,我需要加入这2个表,以便可以访问该表中的所有列。 到目前为止,我已经尝试使用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
我将给您查询,但首先您需要花一点时间来了解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”。
另外...问问题时,您需要提供更多信息。 解释一下您尝试过的内容。 有组织地解释所有要求和目标。 你明白了。
试试这个查询
SELECT s.*, e.exam_date FROM student_tbl s
JOIN exam_tbl e ON e.student_id = s.id
试试这个
SELECT st.id,st.name,st.course,ex.date FROM student AS st
LEFT JOIN exam AS ex ON ex.student_id=st.id
试试这个查询:
SELECT Student.id ,Student.Name,Student.Course,`Exam.Exam Date`
FROM Student
INNER JOIN EXAM
ON Student.id=EXAM.Student_id;
SELECT
S.id, S.Name, S.Course, `E.Exam Date`
FROM
Student S, Exam E
WHERE
S.id = E.Student_id
我仍然觉得您的表上存在严重的设计缺陷-没有表将课程定义为从中获取课程信息(例如名称)的实体。 如果您能够进行一些标准化,则对您有益。
我相信您的查询问题很细微。 查询本身是正确的,因此这是您想要的:
SELECT *
FROM STUDENT S INNER JOIN
EXAM E
ON S.id=E.Student_id
但是,不知何故,您得到的是cross 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.