0

students学生のテーブルのリストと、テーブルのコースのリストがありますstudents_courses。これらの各コースは、アクティブまたは非アクティブの場合があります。
「アクティブな」ユーザーをすばやく見つける方法があるかどうか疑問に思っています。つまり、少なくとも1つのアクティブなコース(sc。active= 1)と非アクティブなユーザーがいるということです。非アクティブなユーザーとは、コースがない(行がない)か、すべてのコースがactive=0 のユーザーです。

また、実際のリストを取得する前に行数を取得したいと思います。
前もって感謝します

4

2 に答える 2

1

サブクエリを使用するため、このクエリは少し遅いかもしれませんが、フィールドがあると仮定すると、これをstudentId使用できます。

SELECT
   students.*,
   IF (
       studentId IN (
           SELECT
               studentId
           FROM
               students_courses
           WHERE
               active=1
   ),1,0) AS hasCourses
FROM
    students
于 2012-04-15T10:35:40.460 に答える
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

合計 = 0 の場合、これはコースがないことを意味し、0 より大きい場合はいくつかのコースを意味します

非アクティブなユーザーの場合、student_course にないすべての student_id を取得します

SELECT student_id FROM students WHERE student_id NOT IN 
     (SELECT DISTINCTROW student_id FROM students)
于 2012-04-15T10:36:37.947 に答える