如何编写SQL查询获取未收到messageId=1471消息的employeeId
查询未收到messageId=1471消息的employeeId的SQL方案
核心逻辑是筛选出main_employee表中,不存在于messageReceiver表messageId=1471对应关联的employeeId列表中的员工ID,共有三种常用实现方式:
方案1:LEFT JOIN过滤法(兼容性最高,推荐)
不会受字段NULL值影响,逻辑直观:
SELECT e.employeeId FROM main_employee e LEFT JOIN messageReceiver r ON e.employeeId = r.employeeId AND r.messageId = 1471 WHERE r.employeeId IS NULL;
方案2:NOT EXISTS写法(关联表有索引时性能优异)
子查询关联匹配,执行效率高:
SELECT e.employeeId FROM main_employee e WHERE NOT EXISTS ( SELECT 1 FROM messageReceiver r WHERE r.messageId = 1471 AND r.employeeId = e.employeeId );
方案3:NOT IN写法(仅适用于messageReceiver.employeeId非空的场景)
如果messageReceiver表的employeeId字段存在NULL值,该写法会返回空结果,使用前需要确认字段约束:
SELECT employeeId FROM main_employee WHERE employeeId NOT IN ( SELECT employeeId FROM messageReceiver WHERE messageId = 1471 );
内容的提问来源于stack exchange,提问作者Irkham Nurhadi
相关产品推荐
相关产品推荐

