SQL Server 从invitation表查询存在未关闭邀请的ID的实现方法
SQL Server 查询代码实现
核心逻辑说明
判断邀请未关闭的依据为InvitationStatus字段值为Opened(初始开启未关闭)或ReOpened(重新开启后未关闭),只要对应ID存在任意一条符合该状态的记录即属于目标查询范围。
方案1:极简写法(适配1000+行小表场景)
SELECT DISTINCT ID FROM invitation WHERE InvitationStatus IN ('Opened', 'ReOpened');
方案2:高性能写法(数据量增长后依然适用)
使用EXISTS子查询避免无效全表扫描,配合ID、InvitationStatus联合索引后性能提升明显:
SELECT DISTINCT t.ID FROM invitation t WHERE EXISTS ( SELECT 1 FROM invitation t_sub WHERE t_sub.ID = t.ID AND t_sub.InvitationStatus IN ('Opened', 'ReOpened') );
方案3:带统计扩展写法
如果需要同时查看每个ID对应未关闭邀请的数量,可使用分组聚合实现:
SELECT ID, COUNT(*) AS unclosed_invitation_count FROM invitation WHERE InvitationStatus IN ('Opened', 'ReOpened') GROUP BY ID;
结果验证
基于你提供的示例数据,以上查询返回的ID结果为0、1、2、3,完全匹配业务逻辑。
内容的提问来源于stack exchange,提问作者Robert Sebas
相关产品推荐
相关产品推荐

