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

Oracle中查询播放列表时Inner Join与NOT IN子查询结果差异问题

两条查询结果差异原因

核心原因是两条SQL的判断逻辑完全不同,只有第二条符合需求:

  • 第一条SQL实际是筛选「只要有任意一首歌不属于指定艺术家就保留播放列表」,逻辑完全错误
  • 第二条SQL是真正筛选「完全没有指定艺术家任何曲目的播放列表」,逻辑正确

第一条查询错误原因

第一条SQL先关联所有播放列表、曲目、专辑、艺术家的对应关系,每一条关联记录对应「播放列表里的某一首具体曲目」。where条件Artist.name not in('Black Sabbath','Chico Buarque')只是把属于这两个艺术家的单条曲目记录删掉,只要播放列表里还有其他艺术家的曲目,对应的关联记录就会留存,distinct去重后这个播放列表还是会出现在结果里。
举个实际例子:播放列表id=1里同时有Chico Buarque的曲目和其他歌手的曲目,过滤时只会删掉Chico Buarque对应的关联行,其他歌手的行还保留,最后去重后id=1还是会被输出,和需求完全相悖。

第二条查询正确原因

第二条SQL的逻辑完全贴合需求:子查询先查出所有包含过这两个艺术家任意曲目的播放列表ID,外层直接过滤掉这些ID,剩下的就是完全没有出现过这两个艺术家曲目的播放列表,所以结果正确。


内容的提问来源于stack exchange,提问作者Vaibhav Gautam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:00:00