繁体   English   中英

为什么此ActiveRecord SQL!=查询与等效=查询相反?

[英]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_idcomments.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.

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