Sql Rails:获取零的父记录有许多关联
以下是我的联想:Sql Rails:获取零的父记录有许多关联,sql,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Sql,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,以下是我的联想: class User < ActiveRecord::Base has_many :tickets end class Ticket < ActiveRecord::Base belongs_to :user end 。。。这很糟糕,因为这不是Ruby的好用例。但我正在努力弄清楚如何使用SQL实现这一点 有人能告诉我一个好的,干净的SQL解决方案吗 可能类似于:User.includes(:tickets)。其中(tickets:{User\u id:n
class User < ActiveRecord::Base
has_many :tickets
end
class Ticket < ActiveRecord::Base
belongs_to :user
end
。。。这很糟糕,因为这不是Ruby的好用例。但我正在努力弄清楚如何使用SQL实现这一点
有人能告诉我一个好的,干净的SQL解决方案吗 可能类似于:
User.includes(:tickets)。其中(tickets:{User\u id:nil})
在一个作用域中,它类似于
:没有_tickets,->{includes(:tickets).where(tickets:{user\u id:nil})}
可以使用SQL子查询,这可能比使用includes()
更有效:
您也可以这样做:
User.joins("LEFT OUTER JOIN orders ON orders.user_id = users.id WHERE orders.user_id IS NULL")
尽管@oliver roset的方法对于以后阅读您的代码的人来说更简单、更容易理解。这同样有效,但我选择上面的答案,因为它可能更清楚。然而,我想对两者进行基准测试,并确认哪一个性能更好。
User.where('id not in (select user_id from tickets)')
User.joins("LEFT OUTER JOIN orders ON orders.user_id = users.id WHERE orders.user_id IS NULL")