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

Oracle多状态表关联查询 仅展示选中状态的实现方案咨询

不需要编写UNION语句实现,直接使用关联条件前置过滤+动态字段拼接的方案更优,实现逻辑如下:

前置准备

首先把前端传入的多选状态列表拆分为两个独立集合:

  • A类选中状态集合:和aCaseStatus字典表的描述字段匹配的选中值
  • B类选中状态集合:和bCaseStatus字典表的描述字段匹配的选中值

可以提前给两类状态的编码/描述加固定前缀(如A类加A_前缀、B类加B_前缀),避免两类状态描述重复,提升拆分效率。

核心查询逻辑

在关联字典表时直接加过滤条件,返回时仅拼接匹配到的选中状态即可,MySQL示例代码如下:

SELECT 
  c.caseId,
  c.caseType,
  c.last_name,
  c.first_Name,
  -- 仅拼接匹配到的选中状态,无匹配值自动忽略
  CONCAT_WS(',', 
    IF(a.status_desc IS NOT NULL, a.status_desc, NULL), 
    IF(b.status_desc IS NOT NULL, b.status_desc, NULL)
  ) AS caseStatus,
  c.created_by
FROM `case` c
-- 内连A类状态字典时直接过滤选中值
INNER JOIN aCaseStatus a 
  ON c.aCaseStatus = a.status_id 
  AND a.status_desc IN (<拆分后的A类选中状态集合>)
-- 左连B类状态字典时直接过滤选中值
LEFT JOIN bCaseStatus b 
  ON c.bCaseStatus = b.status_id 
  AND b.status_desc IN (<拆分后的B类选中状态集合>)
-- 过滤掉两类状态都未匹配的无效数据
WHERE a.status_id IS NOT NULL OR b.status_id IS NOT NULL

方案优势

  • 性能更高:不需要两次扫描case业务表,也不需要做结果合并,关联阶段就过滤掉了非选中状态,数据扫描量远低于UNION方案
  • 逻辑更简洁:不需要处理UNION的字段对齐、结果去重问题,后续新增状态类型时只需要新增对应关联逻辑,维护成本更低
  • 兼容性强:如果后续需要支持单case匹配多个选中状态同时展示的场景,不需要修改整体结构,只需要调整拼接逻辑即可

仅当两类状态的描述/编码完全重合、无法拆分AB类选中集合的特殊场景下,才需要使用UNION方案:分别查询匹配A类状态的case列表、匹配B类状态的case列表,再合并结果去重返回即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:12:03