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

MySQL多表非相等查询失效:为何无法筛选出目标教师数据?

SQL查询未得到预期结果的原因分析

数据表结构

Table_Teacher

id    | name  
-----------------  
1     | Kevin  
2     | Alex   
3     | jax   
4     | Albert

Table_Supervisor

id    | id_teacher  
-----------------   
1     | 1  
2     | 3

需求

从Table_Teacher表中查询出Alex和Albert这两条数据(即未出现在Table_Supervisor的id_teacher字段中的教师)。

错误查询语句

SELECT A.name FROM table_teacher A,tbl_supervisor B WHERE  B.id_teacher != A.id;

问题根源

  1. 隐式笛卡尔积导致结果混乱:用逗号连接两张表会先生成笛卡尔积(4条教师记录 × 2条督导记录 = 8条组合),再过滤B.id_teacher != A.id的记录。这会导致:
    • Kevin(id=1)会和督导表中id_teacher=3的记录匹配(1≠3),被错误查出;
    • Jax(id=3)会和督导表中id_teacher=1的记录匹配(3≠1),被错误查出;
    • Alex和Albert会分别和两条督导记录匹配,结果中出现重复条目。
  2. 逻辑完全偏离需求:需求是筛选「从未出现在督导表中的教师」,但当前语句的逻辑是「只要存在任意一个督导的id_teacher不等于当前教师id,就保留该教师」,和需求完全相悖。

正确实现方式

方式一:使用NOT EXISTS

SELECT A.name 
FROM Table_Teacher A 
WHERE NOT EXISTS (
    SELECT 1 
    FROM Table_Supervisor B 
    WHERE B.id_teacher = A.id
);

方式二:使用NOT IN

SELECT name 
FROM Table_Teacher 
WHERE id NOT IN (SELECT id_teacher FROM Table_Supervisor);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:09:22