Rails的ActiveRecord:连接与左连接,而不是INNER JOIN
我有这个代码
User.find(:all, :limit => 10, :joins => :user_points, :select => "users.*, count(user_points.id)", :group => "user_points.user_id")
其中生成以下SQL
SELECT users.*, count(user_points.id) FROM `users` INNER JOIN `user_points` ON user_points.user_id = users.id GROUP BY user_points.user_id LIMIT 10
是否有可能使用LEFT JOIN而不是INNER JOIN,除了User.find_by_sql
和manualy键入查询?
你可以试试这个
User.find(:all, limit: 10, joins: "LEFT JOIN `user_points` ON user_points.user_id = users.id" , select: "users.*, count(user_points.id)", group: "user_points.user_id")
只是为了将来的参考,增加:all
给出了一个不推荐的消息。 在更高版本的rails中,你可以简单地链接这样的方法:
User.joins("LEFT JOIN `user_points` ON user_points.user_id = users.id").select("users.*, count(user_points.id)").group("user_points.user_id")
或者使用这样的范围 :
scope :my_scope_name_here, -> { joins("LEFT JOIN `user_points` ON user_points.user_id = users.id") .select("users.*, count(user_points.id)") .group("user_points.user_id") }
你也可以在.join
和.select
之间.select
。 希望这有助于未来的人。