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

如何筛选t1中存在但t2中不存在的行(匹配cust_id与product列)

筛选t1中存在但t2中不存在的行(基于cust_id和product匹配)

表结构

t1表数据:

cust_id   product       score
1         bat           0.8
2         ball          0.3
2         phone         0.6
3         tv            1.0
2         bat           1.0
4         phone         0.2
1         ball          0.6 

t2表数据:

cust_id          product
1                bat
2                phone
3                tv

需求

需要筛选出t1中存在,但t2里没有相同cust_id和product组合的行,预期输出如下:

cust_id   product       score
2         ball          0.3
2         bat           1.0
4         phone         0.2
1         ball          0.6 

你的查询问题分析

你写的查询有两个明显错误:

  • JOIN关联条件错误:ON t1.cust_id = t1.cust_id完全没关联t2的字段,应该同时匹配cust_id和product两个字段
  • 拼写错误:WHERE t2.product IS NUL里的NUL少了一个L,正确写法是NULL

正确查询写法

方法一:LEFT JOIN + 筛选NULL

修正关联条件和拼写错误即可:

SELECT t1.* 
FROM t1
LEFT JOIN t2
  ON t1.cust_id = t2.cust_id AND t1.product = t2.product
WHERE t2.product IS NULL;

原理:LEFT JOIN会保留t1所有行,匹配不到t2对应组合的行中,t2的字段会是NULL,通过这个条件就能筛选出目标行。

方法二:NOT EXISTS子查询

用子查询判断当前t1的行是否在t2中不存在:

SELECT t1.*
FROM t1
WHERE NOT EXISTS (
  SELECT 1
  FROM t2
  WHERE t2.cust_id = t1.cust_id AND t2.product = t1.product
);

原理:逐行检查t1的每一行,只要t2中没有相同的cust_id+product组合,就保留该行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:57:25