我有 2 张桌子。
1) 订阅类型
| type |
'type1'
'type2'
2) 订阅
| user | sub_type | subscribed |
'U1' 'type1' 'Y'
'U1' 'type2' 'Y'
'U2' 'type1' 'Y'
从此 ERD 中,您可以看到用户“U2”没有订阅“type2”的条目。我想要一份没有订阅记录的用户的报告。
到目前为止,我有:
select user, count(1)
from subscriptions
group by user
having count(1) != (select count(1) from subscription_types);
这给了我一个没有所有订阅的用户列表。但不是他们缺少哪些。
我已经尝试了许多不同的连接查询变体,其中 subscription_type 为空,没有运气。
我希望下面的查询能解决它,但可惜它没有
select user, sub_type
from subscriptions
group by user, sub_type
having sub_type not in (select type from subscription_types);
在我看来,您想要用户和订阅类型之间的笛卡尔积,减去订阅:
当然,这可以用其他方式表达,但这可能是最明显的一种。
尝试这个:
这个想法是获取所有用户和类型组合,并仅返回那些不存在于
subscriptions
.