gpt4 book ai didi

mysql - LEFT OUTER JOIN 返回特定数据

转载 作者:行者123 更新时间:2023-11-29 22:41:47 26 4
gpt4 key购买 nike

我有 2 个表,其中一个是相关表,另一个是基表。第一个是class_has_student,另一个是student。我需要返回 class_has_student 中特定学生的所有类(class)相关数据以及学生甚至未注册的类(class)的类(class)信息。 (student.id引用class_has_student.student_id)

  class_has_student table        student table

class_id | student_id id | name
---------|----------- --------|---------
1| 1001 1001| John
2| 1001 1002| Michael
1| 1002 1003| Anne
3| 1002
1| 1003
2| 1003
3| 1003
4| 1003

当我传递student.id和class_has_student.class_id以获取相关数据时,我需要从class_has_student获取信息,如果学生未注册该类(class),则class_has_student.class_id为null。例如,如果我想获取 John 的 1、2、3 类的类(class)注册信息。我期望的结果是 1 类和 2 类的相关类(class)学生数据,而只有 3 类的类(class)信息(这里没有显示类(class)表,所以返回 id 就足够了)。所以,结果一定是,

  class_id | student_id
---------|-----------
1| 1001
2| 1001
3| NULL

我尝试通过以下查询和几个变体来实现此目的,但没有成功。如果有人能提供帮助,我们将不胜感激。

SELECT chs.class_id, s.id
FROM student s LEFT OUTER JOIN class_has_student chs ON s.id = chs.student_id AND s.id = 1001
WHERE chs.class_id IN(1,2,3);

fiddle 在这里。 http://sqlfiddle.com/#!9/839fe/4

最佳答案

这应该可以解决问题。

SELECT c.id, 
student_id
FROM class c
LEFT JOIN class_has_student chs
INNER JOIN student s
ON chs.student_id = s.id
AND s.id = 1001
ON c.id = chs.class_id
WHERE c.id IN ( 1, 2, 3 );

这会将类(class)的学生行与已注册类(class)的学生进行匹配,然后与所有类(class)的列表进行匹配,以查看他们是哪些类(class)以及未注册的类(class),然后将其限制为仅您感兴趣的类(class)。

关于mysql - LEFT OUTER JOIN 返回特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29316437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com