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

多匹配场景下如何实现LEFT JOIN,查询tab1表中未匹配的记录

问题原因

你原有写法的错误在于LEFT JOIN仅通过valA单字段关联:同一个valA下可能存在部分行匹配规则、部分行不匹配的情况,未匹配的tab1行会关联到同valA的已匹配tog行,导致WHERE tog.val1 IS NULL无法正确过滤出未匹配记录。

解决方案

方案1:用NOT EXISTS直接判断(推荐,逻辑更清晰,不需要提前生成tog表)

直接将你定义的3种匹配规则作为存在判断条件,查询未匹配的tab1记录:

SELECT t1.*, 
       NULL AS val1, 
       NULL AS val2, 
       NULL AS val3, 
       NULL AS val4
FROM tab1 t1
WHERE NOT EXISTS (
    SELECT 1 FROM tab2 t2
    WHERE 
        -- 对应3种匹配规则,满足任意一种就算匹配成功
        (t1.ValA = t2.Val1 AND t1.ValB = t2.Val2)
        OR 
        (t1.ValA = t2.Val1 AND t1.ValB <> t2.Val2 AND t1.ValD = t2.Val4)
        OR
        (t1.ValA = t2.Val1 AND t1.ValC = t2.Val3 AND t1.ValD <> t2.Val4)
)

方案2:基于已有的tog表查询

如果需要复用你已经写好的tog表逻辑,需要把tab1和tog的4个原始字段全关联(tog中的valA/valB/valC/valD就是原tab1的匹配行字段):

SELECT t1.*, 
       NULL AS val1, 
       NULL AS val2, 
       NULL AS val3, 
       NULL AS val4
FROM tab1 t1
LEFT JOIN tog t
  ON t1.valA = t.valA 
 AND t1.valB = t.valB 
 AND t1.valC = t.valC 
 AND t1.valD = t.valD
WHERE t.valA IS NULL

两种方案都可以得到你期望的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:02