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

i7uaboj4  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(353)

我有三张table,说学生,学生状态,学生课程学生状态
学生课程
我必须根据从表1和表2得到的联接结果联接表1和表3。也就是说,只有在学生处于活动状态时,我才能为他显示课程。我的结果表应该类似于这个结果表
它应该只为活跃状态的学生显示课程,对于不活跃状态的学生,它不应该显示他们的课程,但是仍然需要该记录。
有谁能帮忙处理这个问题吗

ycggw6v2

ycggw6v21#

你应该发布你的尝试,这样我们就可以看到你尝试了什么,以及你在哪里遇到了问题。
你想在这里表演的是 LEFT JOIN ,使用student id作为主键和外键来链接表之间的数据。您希望将您的条件放在join语句中,该语句将课程表与其他两个表连接起来,以便课程只显示给活动的学生。如果你把 WHERE 最后,你会过滤掉所有的行,如果你只想从活跃的学生那里检索所有的东西,这是很有用的,完全过滤掉不活跃的学生。
这是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

工作sql fiddle

mrphzbgm

mrphzbgm2#

您可以添加 active 作为你加入的标准。那么 left join studentcourse中的id到studentstate中的id。
演示

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
yquaqz18

yquaqz183#

我使用t-sql,但如果我理解了你的意思,我认为你应该使用“left join”并在on子句中添加过滤条件。

相关问题