独家加盟有很多关系

独家加盟有很多关系

我有一个Postgres表,其中用户可以有许多付款订阅,付款订阅可以是活动的,也可以是非活动的,这通过付款订阅表上的“已激活的”和“未激活的”日期字段显示。我现在要查找所有没有活动付款订阅的用户。
在没有任何付费订阅的情况下查找所有用户是非常容易的

User.joins("LEFT JOIN payment_subscriptions ON (payment_subscriptions.user_id = users.id)").where("payment_subscriptions.id IS NULL")

我还想找到所有只有非活动订阅的用户。如果我使用与上面相同的模式,我将发现在某个时间点上已停用其订阅的所有用户,但不能保证他们也没有活动订阅。
User.joins("LEFT JOIN payment_subscriptions ON (payment_subscriptions.user_id = users.id)").where("payment_subscriptions.inactivated_at IS NOT NULL")

如何从表中获取没有订阅或没有活动订阅的用户?

最佳答案

这一个为您提供没有任何活动订阅的用户。

User.joins("LEFT JOIN payment_subscriptions on (payment_subscriptions.user_id = users.id and payment_subscriptions.inactivated_at is null)").where("payment_subscriptions.id is null")

如果你只想得到那些不活跃的人,也使用你以前的加入
我不知道在rails中是否可能,但您也可以使用not exists语法:
User.where('
    not exists (
         select *
         from payment_subscriptions as ps
         where ps.user_id = users.id and ps.inactivated_at is not null
    )
')

关于sql - 独家加盟有很多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18403310/

10-11 13:19