【发布时间】:2018-10-28 14:16:59
【问题描述】:
在这个(简化的)系统中,
class Order
has_one :bill
...
end
class Bill
has_many :rebills
belongs_to :order
...
end
class Rebill
belongs_to :bill
...
end
Bill 和 Rebill 都有一个 status 列,该列可能处于多种状态中的一种状态,有些等同于成功,有些等同于失败。
我目前正在尝试查找所有没有某种成功付款的Order 记录。如果关联的Bill 记录处于失败状态,并且Bill 记录有没有 关联的Rebill 记录处于成功,则订单符合我的标准状态。
如果一个Order 有一个失败的Bill,一个同样失败的Rebill,还有一个成功的Rebill,那么Order 已经付款,我对此不感兴趣.
如果Order 有一个失败的Bill 并且没有关联的Rebills,那么它没有成功付款,我我对此感兴趣。
如果一个Order 有一个失败的Bill,并且任何数量的Rebills 处于失败状态(但没有一个处于成功状态),那么就没有成功支付,我 em> 对它感兴趣。
因此,我的问题是如何构造一个查询来返回所有没有某种成功付款的Order 记录?这里真正的问题是我持有在多个地方成功付款的概念,这很糟糕。但是,我觉得我应该能够低声说出正确的 SQL 咒语来做到这一点,但是 join 的数量,where's,have's 和 count's 让我难以置信!
任何人都知道我想在这里做什么,如果有的话,我会怎么做?
【问题讨论】:
标签: sql ruby-on-rails postgresql activerecord