我有一张桌子和一张桌子。courses包含所有课程的列表,volunteer_rosters包含教授/协助课程的志愿者列表。
我想写一个查询,返回一个没有任何志愿者参与的所有课程的列表。这就是正在发生的事情:

courses
-------
id
 1
 3
 4
 5
 6

volunteer_courses
-----------------
id 1 course_id 1
id 2 course_id 1
id 3 course_id 1
id 5 course_id 3
id 6 course_id 3

以下所有查询都将返回
课程编号3
课程编号4
课程编号5
为什么课程编号1(正确)被忽略,但课程编号3不是???
Course.joins("LEFT JOIN student_rosters ON courses.id = student_rosters.course_id where student_rosters.course_id is null")

Course.joins("LEFT JOIN student_rosters ON courses.id = student_rosters.course_id").where(student_rosters: {id: nil})

Course.includes(:student_rosters).references(:student_rosters).where(student_rosters: {id: nil})

Course.includes(:student_rosters).references(:student_rosters).where('student_rosters.id = ?', nil)

Course.joins("LEFT JOIN student_rosters ON courses.id = student_rosters.course_id").where(student_rosters: {id: nil})

同样的问题,但没有一个解决方案对我有效:
LEFT OUTER JOIN in Rails 4

最佳答案

不需要使用join。试试这个:

select id from Courses
where id not in (select course_id from volunteer_courses)

09-04 09:37
查看更多