我有一个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/