我在学生表中有一个students
列表,以及students_courses
表中的课程列表,这些课程可能都处于活动状态或非活动状态。
我想知道是否有一种快速查找“活跃”用户的方法,这意味着他们至少有一个活动课程(sc。active
= 1)和非活动用户。非活动用户是那些没有课程(没有一行)或所有课程都是active
= 0
我也希望在获得实际列表之前获取行数 提前致谢
答案 0 :(得分:1)
此查询可能有点慢,因为它使用子查询,但假设您有一个字段studentId
,您可以使用它:
SELECT
students.*,
IF (
studentId IN (
SELECT
studentId
FROM
students_courses
WHERE
active=1
),1,0) AS hasCourses
FROM
students
答案 1 :(得分:1)
SELECT sum(students_courses.active) as sum, student_id FROM
students JOIN students_courses
ON students.student_id = students_courses.student_id
GROUP BY students_courses.student_id
如果sum = 0,则表示没有课程 并且它大于0意味着一些课程
对于非活动用户,获取所有不在student_course中的student_id
SELECT student_id FROM students WHERE student_id NOT IN
(SELECT DISTINCTROW student_id FROM students)