我有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
答案 0 :(得分:1)
我会给你查询,但首先你应该花点时间了解一下select语句是如何工作的。
当您运行select语句时,您可以将其想象为定义一个完全临时的表,该表只在您查找时才存在片刻。这更好地称为查询结果。
您选择的列列表实际上会成为新表的列。 “FROM”决定使用哪些表来映射这些列。 “WHERE”和“HAVING”子句决定引擎在确定要包含的行时应使用的规则。
那么,您希望在结果中使用哪些列?
您正在从学生和考试表中进行选择,但您希望根据学生ID“合并”行(这是JOIN的来源 - 您应该查看this以获得更好的效果了解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”等关键词。
另外......在提问时你需要提供更多信息。解释你的尝试。以有组织的方式解释所有要求和目标。你明白了。
答案 1 :(得分:0)
尝试此查询
SELECT s.*, e.exam_date FROM student_tbl s
JOIN exam_tbl e ON e.student_id = s.id
答案 2 :(得分: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
答案 3 :(得分:0)
尝试此查询:
SELECT Student.id ,Student.Name,Student.Course,`Exam.Exam Date`
FROM Student
INNER JOIN EXAM
ON Student.id=EXAM.Student_id;
答案 4 :(得分:0)
SELECT
S.id, S.Name, S.Course, `E.Exam Date`
FROM
Student S, Exam E
WHERE
S.id = E.Student_id
我仍然觉得你的桌面存在严重的设计缺陷 - 没有桌子将课程定义为从哪里获取课程信息(例如名称)的实体。如果你能够改变它,那么一些规范化对你有好处。
答案 5 :(得分:0)
我相信您的查询问题很微妙。查询本身是正确的,所以这就是你想要的:
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