首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果子查询不返回任何行,则获取所有记录或忽略该条件

如果子查询不返回任何行,则获取所有记录或忽略该条件
EN

Stack Overflow用户
提问于 2022-05-30 08:55:00
回答 2查看 134关注 0票数 0
代码语言:javascript
复制
SELECT DISTINCT VISION_SBU, SBU_DESCRIPTION
  FROM (SELECT 'All' VISION_SBU, 'All' SBU_DESCRIPTION, 1 sort_order FROM DUAL
        UNION ALL
        SELECT ALPHA_SUB_TAB, ALPHA_SUBTAB_DESCRIPTION, case when ALPHA_SUB_TAB = 'NA' then 99999 else row_number() over (order by ALPHA_SUB_TAB) +1 end sort_order
          FROM ALPHA_SUB_TAB
         WHERE ALPHA_TAB = 3) H1
where VISION_SBU in (
select t2.sbu from vision_user t1 left outer join VU_RESTRICT_SBU t2
on t1.vision_id = t2.vision_id
where t1.vision_id = #VISION_ID#)
and  account_officers in  (
select t2.account_officer from vision_user t1 left outer join VU_RESTRICT_SBU t2
on t1.vision_id = t2.vision_id
where t1.vision_id = #VISION_ID#)
and  vision_ouc in  (
select t2.vision_ouc from vision_user t1 left outer join VU_RESTRICT_SBU t2
on t1.vision_id = t2.vision_id
where t1.vision_id = #VISION_ID#)

当where子句子查询只匹配筛选器数据时,应该显示数据,当where子句子查询不返回任何行时,则不应对where子句应用该筛选器。

此外,我们有多个查询,因此请您使用优化的解决方案进行逻辑处理。

EN

回答 2

Stack Overflow用户

发布于 2022-05-30 09:29:58

您可以为何时VISION_SUB = 'All'添加一个筛选器,以缩短IN筛选器.

此外,如果您期望sbuaccount_officervision_ouc匹配在同一行,那么就不应该使用多个IN筛选器,而应该在同一个子查询中完成所有这些操作。

类似于:

代码语言:javascript
复制
SELECT DISTINCT
       VISION_SBU,
       SBU_DESCRIPTION
FROM   ( SELECT 'All' VISION_SBU,
                'All' SBU_DESCRIPTION,
                1 sort_order
         FROM   DUAL
       UNION ALL
         SELECT ALPHA_SUB_TAB,
                ALPHA_SUBTAB_DESCRIPTION,
                case when ALPHA_SUB_TAB = 'NA' then 99999 else row_number() over (order by ALPHA_SUB_TAB) +1 end sort_order
         FROM   ALPHA_SUB_TAB
         WHERE  ALPHA_TAB = 3
       ) H1
WHERE  (  VISION_SBU = 'All'
       OR EXISTS ( select 1
                   from   vision_user t1
                          left outer join VU_RESTRICT_SBU t2
                          on t1.vision_id = t2.vision_id
                   where t1.vision_id        = #VISION_ID#
                   AND   h1.VISION_SBU       = t2.sbu
                   AND   h1.account_officers = t2.account_officer
                   AND   h1.vision_ouc       = t2.vision_ouc
                 )
       )

但是,我不确定account_officersvision_ouc列是否存在于外部h1查询中,因此需要对其进行修复。

票数 0
EN

Stack Overflow用户

发布于 2022-05-30 09:30:17

您可以将这个案例用作

代码语言:javascript
复制
case when  (select count(t2.sbu) from vision_user t1 left outer join VU_RESTRICT_SBU t2
on t1.vision_id = t2.vision_id
where t1.vision_id = #VISION_ID#) > 0 then 
VISION_SBU in (
select t2.sbu from vision_user t1 left outer join VU_RESTRICT_SBU t2
on t1.vision_id = t2.vision_id
where t1.vision_id = #VISION_ID#) else 1 = 1 end

但就性能而言,这不是个好主意。

如果我是您,我将使用使用临时表的函数/ SP。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72431652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档