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

能否优化该SQL查询?需求移除Union关键字

SQL查询优化(移除UNION关键字)

优化后的SQL

SELECT COALESCE(ORTABLE.SYSPERSUITV, WATABLE.FK_RESOURCE_PERSON) AS PERSON_ID
FROM ORD_NOARCHIVE ORTABLE
FULL OUTER JOIN PLN_WORKASSIGNMENT WATABLE
    ON ORTABLE.SYSPERSUITV = WATABLE.FK_RESOURCE_PERSON
WHERE
    -- 原第一个查询的筛选条件
    (ORTABLE.STANDAARD = 'F'
     AND ORTABLE.BEHCODE = 'BP'
     AND ORTABLE.SYSPERSUITV IS NOT NULL
     AND ORTABLE.ARCHIEF = 'F')
    -- 原第二个查询的筛选条件,且排除已在第一个表中存在的记录
    OR (WATABLE.BEHCODE = 'BP'
        AND WATABLE.IS_ARCHIVED = 'F'
        AND ORTABLE.SYSPERSUITV IS NULL)

逻辑说明

  • 用FULL OUTER JOIN关联两个表,关联键为人员ID字段(SYSPERSUITV和FK_RESOURCE_PERSON)
  • WHERE子句拆分两部分逻辑,完全匹配原UNION查询的业务需求:
    1. 第一部分直接筛选ORD_NOARCHIVE中符合条件的人员ID
    2. 第二部分筛选PLN_WORKASSIGNMENT中符合条件,且未在ORD_NOARCHIVE出现过的人员ID
  • COALESCE函数用来统一结果列的取值,确保输出字段一致

额外优化建议

  • 移除原SQL中冗余的WHERE 1=1,无动态拼接条件时该语句无实际作用
  • 建议创建复合索引提升查询效率:
    • 给ORD_NOARCHIVE表创建索引:(STANDAARD, BEHCODE, ARCHIEF, SYSPERSUITV)
    • 给PLN_WORKASSIGNMENT表创建索引:(BEHCODE, IS_ARCHIVED, FK_RESOURCE_PERSON)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:26:52