我有三张table tblCourse
, tblDegree
, tblStudent
. 我创建了一个课程和学位关系表,如下所示 tblCourseDegreeRelation
. 这个关系表使用外键,当然还有度表,如下所示:
我需要所有的记录包括 tblStudent
使用此查询的所有记录:
SELECT * from tbldegree d
INNER JOIN tblcoursedegreerelation cdr ON d.d_id = cdr.d_id
INNER JOIN tblcourse c ON cdr.c_id = c.c_id
INNER JOIN tblstudent s ON d.d_id = s.d_id
ORDER BY cdr.cdr_id DESC
但这只返回一个学生的记录,而我在数据库中有两个学生请参见SQLFIDLE:
如何从joins查询中获取所有学生记录?
任何帮助都将不胜感激!
2条答案
按热度按时间qncylg1j1#
在您的例子中,您拥有所有的内部联接,因此它将返回两个/所有表都满足其条件的结果(on子句)。
查看你的数据你的学生1=>ali与学位1=>bs信息技术有关。进一步的学位1有课程(1=>编程,2=>英语,5=>数学,6=>电子)
所以对于student 1,内部join子句是有效的,因为它在所有连接的表中都有数据。
现在,如果我们寻找你的学生3=>bilal,他与学位3=>bs数学有关系,但是这个学位没有指定的课程,这就是为什么你的学生bilal没有被退回的原因
为了得到所有的学生,无论他们的相关学位有课程,你可以把你的内部连接到左连接不是所有的表,而是所有的表
tblcoursedegreerelation
以及tblcourse
```SELECT *
FROM tblstudent s
INNER JOIN tbldegree d ON d.d_id = s.d_id
LEFT JOIN tblcoursedegreerelation cdr ON d.d_id = cdr.d_id
LEFT JOIN tblcourse c ON cdr.c_id = c.c_id
ORDER BY cdr.cdr_id DESC
blpfk2vs2#
做一个正确的连接
tblstudent
:这样编辑更好: