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

SQL中<>运算符在多值关联查询场景下的比较机制疑问

关于SQL中<>运算符在多值比较场景下的工作原理拆解

先直接给你结论:<>(不等于)运算符是逐行、逐个值进行比较的,既不会只和IN列表里的某个固定值(比如2)比较,也不会随机选值——它的比较逻辑完全依赖外层查询中当前行的A.Col1值。

我们结合你的数据表和查询语句一步步分析:

先明确外层查询的执行逻辑

外层查询SELECT Col2 FROM MyTable A WHERE Col1 IN (2,3,4)会先筛选出Col1为2、3、4的三行数据,然后对每一行单独执行内层的NOT EXISTS子查询。

内层子查询中<>的具体行为

内层子查询是SELECT 1 FROM MyTable B WHERE B.Col1 <> A.Col1,这里的A.Col1是外层当前行的取值,所以:

  • 当外层A的Col1=2时,子查询会查找MyTable中所有Col1≠2的行(也就是Col1为1、3、4的行),这时候子查询能返回结果,NOT EXISTS就会判定为false,所以这一行不会被外层查询选中;
  • 当外层A的Col1=3时,子查询会查找所有Col1≠3的行(Col1为1、2、4),同样能查到结果,NOT EXISTS为false,不选中;
  • 当外层A的Col1=4时,子查询会查找所有Col1≠4的行(Col1为1、2、3),还是能查到结果,NOT EXISTS为false,不选中。

所以最终这个查询的结果是空集,因为每一个外层行对应的子查询都能找到满足条件的数据,导致NOT EXISTS不成立。

补充:和“批量不等于多值”的区别

如果你想表达“Col1不等于2、3、4中的任意一个”,那应该用Col1 NOT IN (2,3,4)或者Col1 <> 2 AND Col1 <> 3 AND Col1 <>4,这和你当前查询里的<>逻辑完全不同——你的查询是拿外层行的单个值,和内层表的所有行做不等于比较,而不是和多个值做批量判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:47:40