Rails范围的SQL查询,不相交?

Rails范围的SQL查询,不相交?,sql,ruby-on-rails,scopes,Sql,Ruby On Rails,Scopes,我正在尝试查找属于没有相关项目记录的超市的水果总数 我的关系是:超市有很多水果,超市有很多商品。项目通过其外部_upc代码链接到水果。如何在给定超市的水果表中找到商品中没有相应条目的记录数量 我不确定从何处开始这个查询,我想我的where子句需要左连接或not IN。但是,如果没有更多信息,我将猜测一些事情,但是一个可能的解决方案是: supermarket.fruits.where(external_upc: nil).count “supermarket”是表示要搜索的超市的对象,因此“s

我正在尝试查找属于没有相关项目记录的超市的水果总数

我的关系是:超市有很多水果,超市有很多商品。项目通过其外部_upc代码链接到水果。如何在给定超市的水果表中找到商品中没有相应条目的记录数量


我不确定从何处开始这个查询,我想我的where子句需要左连接或not IN。但是,如果没有更多信息,我将猜测一些事情,但是一个可能的解决方案是:

supermarket.fruits.where(external_upc: nil).count
“supermarket”是表示要搜索的超市的对象,因此“supermarket.fruits”将提供该市场中的所有水果

然后,我假设,如果一个水果没有链接项目,它的外部\u upc代码将为nil,因此“whereexternal\u upc:nil”将为您提供超市中没有链接项目的水果


最后我们使用“.count”来。。。计数。

通过使用EXCEPT查询,我能够找到我要查找的内容

Select COUNT(item_id)
FROM (
SELECT item_id
FROM fruits
WHERE fruits.active = 't' AND fruits.supermarket_id = 2
EXCEPT
SELECT externa;_upc
FROM items) f;

其中一个问题是,水果最初是从该项目创建的,因此它们确实有upc_代码,但用于创建水果的一些原始项目除外。不再存在。我知道这些关系存在一些外围问题,但这超出了这个问题的范围。换句话说,我基本上需要选择一家超市的所有商品,以及同一家超市的所有水果,然后问,有多少水果不在商品列表中。我猜一个例外条款或许也会有所帮助。