[英]Why doesn't this ActiveRecord SQL != query do the opposite of the equivalent = query?
我有下面的AR / SQL代码片段,返回以下值:
Post.joins(:comments).uniq.count # => 20
当我按如下所述对其进行优化时,我得到的折衷值是:
Post.joins(:comments).uniq.where('comments.user_id = ?', user.id).count # => 9
因此,当我运行相同的代码但匹配项被否定时,我希望会得到相反的记录-即计数为11。但是相反,我得到了:
Post.joins(:comments).uniq.where('comments.user_id != ?', user.id).count # => 20
我想说的是,基本上是“找到所有评论都是由以外的人发表的。”
我是否误解了SQL中的否定行为?
我应该指定我正在使用Rails 3.2.18,它似乎不允许在Rails指南中找到where.not()
语法(它会引发ArgumentError:错误的参数数量(0表示1))。
第二个查询实际上是在回答这个问题:查找所有帖子中至少有一个不是由...发表的。 但是其他人也在这些帖子中发表了评论。
符合我的预期...
我注意到的一件事是您的查询是不同的.user_id和comments.user_id
Post.joins(:comments).uniq.where('.user_id = ?', user.id).count # => 9
Post.joins(:comments).uniq.where('comments.user_id != ?', user.id).count # => 20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.