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

SQL实现按Mat_Id存在状态选择连接条件的两表左连接咨询

问题解决方案

原有写法错误原因

你现有的SQL使用AND连接两个匹配条件,要求两表的Mat_Id和Mat_desc同时相等才能匹配,不符合分场景切换匹配规则的需求。

可行实现思路

按照需求分两种分支做关联匹配:

  • Tbl_1的Mat_Id非空时,仅使用两表Mat_Id相等作为匹配条件
  • Tbl_1的Mat_Id为空时,仅使用两表Mat_desc相等作为匹配条件

写法1:直接使用OR分支判断(写法简洁)

SELECT 
    a.Mat_Id,
    b.Mat_desc
FROM Tbl_1 a
LEFT JOIN Tbl_2 b 
ON (
    a.Mat_Id IS NOT NULL 
    AND a.Mat_Id = b.Mat_Id
) OR (
    a.Mat_Id IS NULL 
    AND a.Mat_desc = b.Mat_desc
)

写法2:UNION ALL拆分场景(性能更优,适合大数据量表)

将两种匹配场景的查询拆分后合并,避免OR关联导致的索引失效问题:

-- 匹配场景1:Tbl_1的Mat_Id非空,按Mat_Id关联
SELECT a.Mat_Id, b.Mat_desc
FROM Tbl_1 a
LEFT JOIN Tbl_2 b ON a.Mat_Id = b.Mat_Id
WHERE a.Mat_Id IS NOT NULL

UNION ALL

-- 匹配场景2:Tbl_1的Mat_Id为空,按Mat_desc关联
SELECT a.Mat_Id, b.Mat_desc
FROM Tbl_1 a
LEFT JOIN Tbl_2 b ON a.Mat_desc = b.Mat_desc
WHERE a.Mat_Id IS NULL

两种写法都可以输出你预期的结果:1001无匹配返回NULL,1002按Id匹配到CDS,空Id的MNK按描述匹配到值、ELP无匹配返回NULL,2003按Id匹配到STX。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:24:03