如何通过链式JOIN关联多表,查询未完成指定操作的人员?
SQLite多表链式JOIN查询未完成指定操作的人员姓名
首先明确你提到的三个表(包含你手动建立的关联表,假设命名为person_b_assoc,可替换为实际表名)的核心关联字段:
people:person_id(主键)、nameperson_b_assoc:person_id(关联people.person_id)、b_user_id(关联results的B源用户字段)results:b_user_id(B源用户标识)、action(指定操作字段)、done(完成标记,NULL表示未完成)
用链式LEFT OUTER JOIN即可保留所有people表记录,再关联中间表与results表,最后过滤出符合条件的人员。SQL语句如下:
SELECT DISTINCT p.name FROM people p LEFT JOIN person_b_assoc pb ON p.person_id = pb.person_id LEFT JOIN results r ON pb.b_user_id = r.b_user_id AND r.action = '你要指定的操作' WHERE r.done IS NULL OR pb.b_user_id IS NULL;
语句说明:
- 链式LEFT JOIN:先将
people与关联表左连接,确保所有人员记录被保留;再将关联结果与results左连接,仅匹配指定的action操作。 - 过滤条件:
r.done IS NULL:匹配有对应操作记录但未完成(done为NULL)的人员pb.b_user_id IS NULL:匹配无B源用户关联、自然无操作记录的人员
- DISTINCT:避免同一人员因多条未完成记录被重复输出
若你的关联表结构与假设不同,替换对应关联字段和表名即可。
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

