MySQL查询求助:筛选无关联记录及满足条件的关联记录
解决方案
你只需要在原查询的条件中添加一个OR分支,用来匹配"存在对应assignments记录且assignments.active=0"的情况即可,修改后的SQL如下:
SELECT first_name, last_name FROM clients WHERE clients.status = 'Active' AND ( -- 第一类:无对应assignments记录 NOT EXISTS( SELECT * FROM assignments WHERE assignments.client_id = clients.client_id ) -- 第二类:有对应assignments记录且该记录active=0 OR EXISTS( SELECT * FROM assignments WHERE assignments.client_id = clients.client_id AND assignments.active = 0 ) );
逻辑说明
- 外层
WHERE clients.status = 'Active'确保只筛选状态为活跃的客户 - 第一个子条件
NOT EXISTS(...)保留原逻辑,获取没有任何关联任务记录的客户 - 新增的
OR EXISTS(...)子条件,用来筛选存在至少一条关联任务,且该任务状态为非活跃(active=0)的客户
如果同一个客户有多个任务记录(部分active=0、部分active=1),这个查询依然有效——EXISTS只要找到符合条件的一条记录就会返回真,不会因为其他不符合的记录排除该客户。
内容的提问来源于stack exchange,提问作者joanb
相关产品推荐
相关产品推荐

