如何根据两个表的连接条件结果连接两个表

时间:2018-06-01 16:46:27

标签: mysql

我有三张桌子可以说学生,学生州,学生课程 Student Student State

Student Course

我必须根据我从表1和表2得到的连接结果加入表1和表3.这意味着我只有在他处于活动状态时才必须为学生显示课程。 我的结果表应该是这样的 Resultant table

它应该只显示活动状态学生的课程,对于不活跃的学生,它应该不应该显示他们的cousre但是仍然需要该记录。

任何人都可以帮助您如何继续这个

3 个答案:

答案 0 :(得分:0)

我使用t-sql但如果我说对了你的意思我认为你应该使用" left join"并将过滤条件放在ON子句中。

答案 1 :(得分:0)

您可以将active添加为加入条件。然后将left join StudentCourse中的ID转换为StudentState中的id。

<强> DEMO

SELECT s.studentno
  , s.studentname
  , sc.course
FROM student s
LEFT JOIN studentstate ss
  ON ss.studentno = s.studentno AND ss.currentstate = 'Active'
LEFT JOIN studentcourse sc
  ON ss.studentno = sc.studentno

答案 2 :(得分:0)

您应该发布您的尝试,以便我们可以看到您尝试过的内容以及遇到问题的位置。

您要在此处执行的操作是LEFT JOIN,使用学生ID作为主键和外键来链接表之间的数据。您希望将条件放在JOIN语句中,该语句将课程表与其他两个表联系起来,以便仅为活动学生显示课程。如果你在最后添加一个WHERE条件,你最终会过滤掉整行,如果你只想从活跃的学生那里检索所有内容,那么就完全过滤掉了不活跃的学生。 / p>

这是SQL:

SELECT
  tbl_student.id,
  tbl_student.name,
  tbl_student_course.course as course,
  tbl_current_state.state as state
FROM
  tbl_student
LEFT JOIN
  tbl_current_state ON tbl_student.id = tbl_current_state.id
LEFT JOIN
  tbl_student_course ON tbl_current_state.id = tbl_student_course.id AND tbl_current_state.state = 'Active'
ORDER BY
 tbl_student.id ASC

Working SQL fiddle