统计收件人A订阅但收件人B未订阅的记录数问题排查
问题描述
- 收件人A(用户ID:13250626)的订阅记录:

- 收件人B(用户ID:13251076)的订阅记录:

我要统计收件人A已订阅但收件人B未订阅的记录数量,预期结果为1,但以下查询返回0:
SELECT COUNT(*) FROM NmsSubscription WHERE iRecipientId = 13250626 AND NOT EXISTS( SELECT 1 FROM NmsSubscription WHERE iRecipientId = 13251076 )
修正方案
你的查询逻辑出错了——NOT EXISTS子句只是在检查收件人B是否存在任何订阅记录,而非检查B有没有订阅当前行对应的同一订阅项。只要B有过订阅,这个条件就不成立,自然返回0。
假设表中有标识唯一订阅项的字段(比如iSubscriptionId,请根据实际表结构替换成真实字段名),修正后的查询需要关联该字段,确保筛选的是A订阅过但B没订阅的具体项:
SELECT COUNT(*) FROM NmsSubscription a WHERE a.iRecipientId = 13250626 AND NOT EXISTS( SELECT 1 FROM NmsSubscription b WHERE b.iRecipientId = 13251076 AND b.iSubscriptionId = a.iSubscriptionId -- 关联同一订阅项 )
如果你的表用其他字段(比如订阅名称、编码)区分不同订阅,把iSubscriptionId换成对应的字段即可。
内容的提问来源于stack exchange,提问作者David Garcia
相关产品推荐
相关产品推荐

