MySQL三表场景:如何查找未关联act类型文档的Items记录
MySQL查询:找出未关联doc_type为act的文档的item_id
这里提供两种可行的SQL解决方案:
方法一:使用NOT IN子查询
SELECT DISTINCT item_id FROM Items_Docs WHERE item_id NOT IN ( SELECT item_id FROM Items_Docs JOIN Docs ON Items_Docs.doc_id = Docs.id WHERE Docs.doc_type = 'act' );
思路说明:
- 子查询先关联
Items_Docs和Docs表,筛选出所有关联了doc_type='act'文档的item_id(对应数据里的item2和item3) - 外层查询从
Items_Docs中排除这些item_id,用DISTINCT确保结果唯一,最终得到未关联act类型文档的item_id
方法二:使用LEFT JOIN
SELECT DISTINCT i.item_id FROM Items_Docs i LEFT JOIN Docs d ON i.doc_id = d.id AND d.doc_type = 'act' WHERE d.id IS NULL;
思路说明:
- 通过
LEFT JOIN关联Items_Docs与Docs表,同时限定文档类型为act - 若某个item未关联任何act类型文档,关联后的
Docs表字段会全部为NULL,通过WHERE d.id IS NULL筛选出这类记录,最后去重得到结果
内容的提问来源于stack exchange,提问作者Nick Z
相关产品推荐
相关产品推荐

