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

如何不用子查询获取t1中与t2匹配id但item不匹配的数据

问题:找出t1中与t2不匹配的记录(禁止使用子查询)

现有表结构

t1(主键:(id, item))

iditem
11
12
13
21
22
23

t2(主键:(id, item))

iditem
11
12
21
23

预期输出

iditem
13
22

错误查询分析

你尝试的SQL存在逻辑错误:

select 
    a.id, a.item 
from 
    t1 a, t2 b, 
where 
    a.id = b.id and b.item <> b.item;
  • b.item <> b.item 是永远不成立的条件(一个值不可能不等于自身),直接导致过滤逻辑完全失效。另外,逗号连接表的旧式隐式连接写法,本身也不适合用来筛选不匹配的记录。

正确解法(无自查询)

使用LEFT JOIN是不依赖子查询筛选不匹配记录的标准方案:

SELECT a.id, a.item
FROM t1 a
LEFT JOIN t2 b 
  ON a.id = b.id 
  AND a.item = b.item
WHERE b.id IS NULL;

逻辑说明

  1. LEFT JOIN会保留t1的所有记录,同时将t1中与t2主键(id+item)匹配的记录关联起来
  2. 当t1中的某条记录在t2里找不到对应匹配时,t2的所有字段会被填充为NULL
  3. 通过WHERE b.id IS NULL就能精准筛选出这些t1独有的、在t2中不存在的记录,完全符合预期输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:35:35