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

Oracle SQL两表三列关联时C3空值匹配*的关联逻辑实现问题

解决方法

你可以直接在JOIN的ON条件中通过分支逻辑处理C3的匹配规则,写法如下:

SELECT t1.c1, t1.c2, t1.c3, t2."DESC"
FROM table_1 t1
JOIN table_2 t2 
  ON t1.c1 = t2.c1 
  AND t1.c2 = t2.c2 
  AND (
    (t1.c3 IS NOT NULL AND t1.c3 = t2.c3)
    OR 
    (t1.c3 IS NULL AND t2.c3 = '*')
  );

注意:DESC是Oracle的保留关键字,所以查询时需要用双引号包裹,否则会触发语法错误。Oracle中空字符串会被默认识别为NULL,如果你表中t1.C3的空值是空字符串格式,上述逻辑也可以正常覆盖。

逻辑说明

  • 先保证C1、C2两列完全匹配,再通过括号包裹的OR分支处理两种C3匹配场景:
    • t1.C3不为空时,直接和t2.C3做等值匹配
    • t1.C3为空时,仅匹配t2中C3为*的记录

用你提供的样例数据执行上述SQL,返回结果如下:

C1C2C3DESC
3000130Desc1
3000132Desc2
30002nullDesc3
3000401Desc5
3000402Desc6
3000414Desc7
30004nullDesc4

如果你更习惯把关联条件写在WHERE子句中,写法基本一致:

SELECT t1.c1, t1.c2, t1.c3, t2."DESC"
FROM table_1 t1, table_2 t2
WHERE t1.c1 = t2.c1 
  AND t1.c2 = t2.c2 
  AND (
    (t1.c3 IS NOT NULL AND t1.c3 = t2.c3)
    OR 
    (t1.c3 IS NULL AND t2.c3 = '*')
  );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:06:03