SQL 聚合计数 = 0

发布于 2024-10-03 07:19:23 字数 724 浏览 4 评论 0原文

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

class Item class Item class Item class Item class Item class Item class Item class Item class Item class Item <增强现实
has_many :持有

类控股<增强现实
own_to :item

Holding 模型有一个“active”布尔值。

我希望找到每个拥有 0 个“活跃”馆藏的项目(它可能有任意数量的相关馆藏),我已经尝试了相当多的组合。

从项目中选择 * JOIN
(SELECT Holdings.item_id, count(ifnull(item_id,0)) AS hcount FROM 馆藏
WHERE Holdings.active =“t”
按 Holdings.item_id 分组
hcount = 0)
ON items.id = Holdings.item_id

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

任何人都可以指出我正确的方向吗?

I have the following models in a Rails 3 app, and select requirement:

class Item < AR
has_many :holdings

class Holding < AR
belongs_to :item

The Holding model has an 'active' boolean value.

I wish to find each Item that has 0 'active' holdings ( it may have any number of associated holdings ), I've tried quite a few combinations.

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

but this will only return counts that are greater than 0.

Can anyone point me in the right direction?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蔚蓝源自深海 2024-10-10 07:19:23

当您指的是任何时,请不要使用计数!

使用不存在子句。

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

这个英文声明说给我馆藏中没有匹配行的项目的所有行。

Don't use count when you mean any!

Use an not exists clause.

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

This statement in english says give me all the rows from items where there are no matching rows in holdings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文