Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从表中获取所有记录,如果存在,则从其他表中获取与其相关的信息_Mysql_Sql - Fatal编程技术网

Mysql 从表中获取所有记录,如果存在,则从其他表中获取与其相关的信息

Mysql 从表中获取所有记录,如果存在,则从其他表中获取与其相关的信息,mysql,sql,Mysql,Sql,我有三个表(学生、小组、科目)和另外两个表作为桥梁(弱)表,用于连接学生和其他两个表(学生组、学生科目)。类似于: +-----+----------------+ +-----+-----------+ +-----+-----------+ | id | student_name | | id |group_name | | id |course_name| +-----|---------+------| +-----|-----------+

我有三个表(学生、小组、科目)和另外两个表作为桥梁(弱)表,用于连接学生和其他两个表(学生组、学生科目)。类似于:

+-----+----------------+     +-----+-----------+    +-----+-----------+
| id  |  student_name  |     | id  |group_name |    | id  |course_name|
+-----|---------+------|     +-----|-----------+    +-----|-----------+
|  1  |  stunet 1      |     |1    | g1        |    |1    | c1        |
|  2  |  stuent 2      |     |2    | g2        |    |2    | c2        |
|  3  |  stuent 3      |     |3    |           |    |3    |           |  
+-----+---------+------+     +-----+-----------+    +-----+-----------+

    +------------+-----------+     +------------+------------+
    | student_id |  group_id |     | stuent_id  |  course_id |
    +------------+-----------+     +------------+------------+
    | 1          |  1        |     | 1          |  2         |
    | 2          |  2        |     | 3          |  1         |
    |            |           |     +------------+------------+
    +------------+-----------+
我想要的是:显示所有学生(无论他们是否被分配到组,是否注册科目)和科目和组

+-----+---------+-----------+
| student | group | deleted |
+---------|-------+---------|
|student 1| g1    |c2       |
|student 2| g2    |         | 
|student 3|       |c1       |  
+---------+-------+---------+
我之前的查询只显示分配给某个组并注册某个科目的学生

     select students.*       
     groups.group_name,
     modules.module_name
     from students 
     JOIN students_groups ON students.id = students_groups.student_id 
     JOIN groups ON students_groups.group_id = groups.id 
     JOIN students_modules ON students.id = students_modules.student_id 
     JOIN modules ON students_modules.module_id = groups.id 

+-----+---------+-----------+
| student | group | deleted |
+---------|-------+---------|
|student 1| g1    |c2       |
+-----+---------+-----------+

使用左外部联接而不是联接:

Select
std.studentname,
grp.groupname,
crs.coursename
FROM test.student std
LEFT OUTER JOIN test.stu_grp_brg sgb
on sgb.student_id=std.id
left outer join test.group grp
on sgb.group_id=grp.id
left outer join test.stu_course_brg scb
on scb.student_id=std.id
left outer join test.course crs
on crs.id=scb.course_id

非常感谢,我试图找到一些关于外部连接的资源,但是我找不到,你知道任何网站吗?请解释清楚,谢谢。我会尝试以下网站之一获取更多信息。如果你在谷歌上搜索“mysql加入”,你也会找到其他人。当我学习时,维恩图的可视化非常有用。如果你需要一些快速的东西,看看链接。使用易于理解的维恩图进行解释: