我在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的计数。
有人能指出我正确的方向吗?
答案 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)
这句英文说法告诉我所有项目的所有行,其中没有匹配的行。