繁体   English   中英

将此SQL查询转换为AREL(外部联接)

[英]Convert this SQL query to AREL (outer joins)

我正在尝试将此查询转换为AREL:

SELECT users.* FROM users LEFT OUTER JOIN (
      SELECT DISTINCT educations.user_id
      FROM educations
      INNER JOIN schools
      ON educations.school_id = schools.id
      WHERE schools.name = "school_name" ) AS x 
ON users.id = x.user_id WHERE x.user_id IS null

我希望能够像这样链接此查询:

class User < ActiveRecord::Base
  def find_by_school(school_name)
    ...
  end
end

myUser.find_by_school("school_name").where(...).joins(...)...etc

有任何想法吗?

尽管这个问题有些陈旧,但我还是偶然发现了这个问题。

如果我正确理解了您的查询,那么您想让某所学校的所有未受过教育的用户...

如果是这样,我会走以下路线-鉴于您的关系都已正确建立:

class User < ActiveRecord::Base
  def self.find_educated_by_school_name(school_name)
    Education.pluck(:user_id).joins(:schools).where('schools.name = ?', school_name)
  end
end

User.where('users.id NOT IN (?)', User.find_educated_by_school_name('school_name'))

还请记住,按照惯例, myUser.find_by_*表示“在给定的用户实例上查找内容”。 因此,它应该利用用户实例来查找内容。

User.find_by_*意思是“通常根据特定条件查找用户”。

希望我的意思很清楚!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM