从多个表的 INNER JOINS 获取所有记录

Getting all records from INNER JOINS of multiple tables

我有三个table tblCourse , tblDegree , tblStudent 。我创建了一个课程和学位关系 table,就像 tblCourseDegreeRelation。这个关系 table 使用外键当然和学位 table 就像:

我需要使用此查询获取所有记录,包括 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

But this only returns the one student's record while I've two students in the database see SQLFiddle:

如何从连接查询中获取所有学生的记录?

任何帮助将不胜感激!

只需在 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
RIGHT JOIN tblstudent s ON d.d_id = s.d_id
ORDER BY cdr.cdr_id DESC

编辑 这种方式更好:

SELECT c.d_id,c.d_name,c.d_fee,cdr.cdr_id,cdr_c_id,deg.c_name,deg.d_credit,a.s_id,a.s_name
FROM tblstudent a
     left join tblDegree c ON a.d_id = c.d_id
     left join tblcoursedegreerelation cdr ON cdr.d_id=c.d_id
     left join tblcourse deg on deg.c_id=cdr.c_id

ORDER BY cdr.cdr_id DESC

在您的情况下,您拥有所有内部联接,因此它会 return 结果 both/all 表满足其条件(on 子句)。

查看您的数据您的学生 1 => Ali 与学位 1 =>BS Information Technology 有关系。 进一步的学位 1 有课程(1 => 编程,2 => 英语,5=> 数学,6 => 电子)

因此对于学生 1,您的内部连接子句有效,因为它在所有连接表中都有数据。

现在,如果我们寻找您的学生 3 => Bilal,他与学位 3 有关系 => BS 数学,但是这个学位没有指定的课程,这就是为什么您的学生 Bilal 没有 returned

为了让所有学生无论他们的相关学位是否有课程,您都可以将您的内部联接变成左联接,但不是针对所有表,而是针对 tblcoursedegreerelationtblcourse

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

Demo

在结果集中,由于与课程没有关联,您可以看到以下列为空

cdr_id、c_id、d_id、c_id、c_name、c_credit