Sql聚合计数= 0

时间:2010-11-21 23:21:09

标签: sql ruby-on-rails-3 scope arel

我在Rails 3应用程序中有以下模型,并选择要求:

class Item < AR
has_many :holdings

class Holding < AR
belongs_to :item

Hold模型有一个'active'布尔值。

我希望找到每个拥有0个“有效”馆藏的物品(它可能有任意数量的相关馆藏),我尝试了很多组合。

SELECT * from items JOIN
(SELECT holdings.item_id, count(ifnull(item_id,0)) AS hcount FROM holdings
WHERE holdings.active = "t"
GROUP BY holdings.item_id
HAVING hcount = 0)
ON items.id = holdings.item_id

但这只会返回大于0的计数。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

当你指的时候不要使用计数!

使用not exists子句。

SELECT * from items i
where not exists(select holdings.item_id 
             from holdings 
             where holdings.active = 't' 
               and holdings.item_id = i.item_id)

这句英文说法告诉我所有项目的所有行,其中没有匹配的行。