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

Oracle SQL查询:获取表A中与表B无匹配值的数据

解决Oracle SQL查询表A中无表B匹配记录的问题

原SQL返回空结果的核心问题:

  • NOT EXISTS子查询没有关联表A和表B的匹配字段(比如ID),导致只要表B中有符合日期条件的记录,NOT EXISTS就判定为假,最终过滤掉所有表A的数据
  • 子查询里的date (:a)语法错误,缺少等于符号=

正确的查询写法

方法1:使用NOT EXISTS(推荐)

SELECT DISTINCT
    a.id,
    a."DESC"  -- DESC是Oracle关键字,需用双引号包裹
FROM 
    table_a a  -- 避免用`table`作为表名,这是Oracle关键字,这里替换为table_a
WHERE 
    a.date = :a 
    AND NOT EXISTS (
        SELECT 1  -- 子查询只需判断存在性,用1更高效
        FROM table_b b 
        WHERE b.date = :a 
          AND a.id = b.id  -- 关联表A和表B的匹配字段(示例为ID)
          -- 若需同时匹配描述字段,可添加 AND a."DESC" = b."DESC"
    )

方法2:使用LEFT JOIN + IS NULL

SELECT DISTINCT
    a.id,
    a."DESC"
FROM 
    table_a a
LEFT JOIN table_b b 
    ON a.id = b.id 
    AND b.date = :a
WHERE 
    a.date = :a 
    AND b.id IS NULL  -- 筛选出表B中无匹配的记录

关键注意事项

  • DESC是Oracle保留关键字,直接使用会报错,必须用双引号"DESC"包裹或给字段起别名(比如a."DESC" AS description)
  • 表名table也是关键字,实际使用时建议更换为有意义的表名(比如table_a、table_b)
  • 匹配条件要明确:必须关联表A和表B中用来判定“匹配”的字段(示例中是ID,需匹配多字段可自行补充)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:03:58