如何在单个NOT IN条件中使用多表值查询未被关联的image表数据
合并多表NOT IN条件的SQL解决方案
可以通过 UNION ALL 拼接三张表的非空image_id结果集,实现单个NOT IN条件的查询效果,改造后的SQL如下:
SELECT * FROM `image` WHERE image.id NOT IN ( SELECT image_id FROM product WHERE image_id IS NOT NULL UNION ALL SELECT image_id FROM category WHERE image_id IS NOT NULL UNION ALL SELECT image_id FROM customer WHERE image_id IS NOT NULL )
补充说明
- 此处使用
UNION ALL而非UNION,是因为NOT IN判断逻辑不受重复值影响,不需要对结果集去重,UNION ALL执行效率更高 - 若表数据量较大,推荐使用
LEFT JOIN匹配后筛选空值的写法,性能通常优于NOT IN实现:
SELECT i.* FROM `image` i LEFT JOIN product p ON i.id = p.image_id LEFT JOIN category c ON i.id = c.image_id LEFT JOIN customer cu ON i.id = cu.image_id WHERE p.image_id IS NULL AND c.image_id IS NULL AND cu.image_id IS NULL
内容的提问来源于stack exchange,提问作者jojo
相关产品推荐
相关产品推荐

