You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:24:03