代码之家  ›  专栏  ›  技术社区  ›  scaney

Sql聚合计数=0

  •  0
  • scaney  · 技术社区  · 14 年前

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

    class Item < AR
    has_many :holdings

    class Holding < AR
    belongs_to :item

    持有模型有一个“活动”布尔值。

    我想找到每一个项目有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 回复  |  直到 14 年前
        1
  •  1
  •   John Hartsock    14 年前

    当你说“有”的时候不要用“数”!

    使用不存在子句。

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

    英语中的这句话是说,如果项目中没有匹配的行,请给出其中的所有行。