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

如何通过条件LEFT JOIN获取指定客户未在t2中的交易数据

解决方案

核心思路

要拿到目标数据,得抓好两个筛选关键点:

  • 只针对在t2里有至少一笔交易的客户
  • 从这些客户的t1交易里,排除掉已经在t2出现过的交易

推荐SQL语句

SELECT t1.cust_code_1, t1.trans_code_1
FROM t1
-- 只保留t2中存在的客户
WHERE t1.cust_code_1 IN (SELECT DISTINCT cust_code_2 FROM t2)
-- 剔除t1里已经在t2存在的交易
AND NOT EXISTS (
    SELECT 1
    FROM t2
    WHERE t2.cust_code_2 = t1.cust_code_1
      AND t2.trans_code_2 = t1.trans_code_1
)
-- 过滤掉不需要的异常记录
AND t1.cust_code_1 != '.'
AND t1.cust_code_1 != '3';

语句解释

  • IN (SELECT DISTINCT cust_code_2 FROM t2):直接锁定t2里有交易的客户,避免无关客户混入
  • NOT EXISTS:精准匹配客户和交易,比LEFT JOIN后判空更高效,还能避免出现多余的无效匹配记录
  • 最后两行:直接过滤掉你提到的cust_code_1=3和特殊字符.的异常数据,可根据实际情况调整

可选LEFT JOIN优化写法

如果一定要用LEFT JOIN,得严格加过滤条件,避免多余记录:

SELECT t1.cust_code_1, t1.trans_code_1
FROM t1
LEFT JOIN t2 
  ON t1.cust_code_1 = t2.cust_code_2 
  AND t1.trans_code_1 = t2.trans_code_2
-- 确保是t2里存在的客户
WHERE t2.cust_code_2 IS NOT NULL
-- 确保该交易在t2里不存在
AND t2.trans_code_2 IS NULL
-- 过滤异常记录
AND t1.cust_code_1 != '.'
AND t1.cust_code_1 != '3';

注意:这种写法必须同时用客户和交易做关联条件,不然会出现大量无效的NULL匹配,导致多余记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:35:26