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

如何实现仅当查询A.1无结果时才执行查询A.2?

用带条件的UNION ALL实现按需执行查询

可以通过带条件的UNION ALL实现你的需求:优先返回Query A.1的结果,只有当A.1无数据时,Query A.2才会返回数据。核心是给A.2添加一个判断条件,确认A.1没有结果后才执行。

最终SQL代码

-- Query A:优先返回A.1结果,无结果时返回A.2
SELECT  LE_AGENDA_FK, LE_CODE, LE_ID, LE_KLAS_FK, LE_KLASPARTITIE_FK, LE_OMSCHRIJVING, LE_VERANDERDDOOR, LE_VERANDERDOP , 
        Count(LH_ID) As AantalLln  
FROM  LESEENHEID 
LEFT JOIN LOOPBAANLESEENHEID on (LH_LESEENHEID_FK = LE_ID)  
LEFT JOIN LOOPBAAN ON (LH_LOOPBAAN_FK = LB_ID)    
WHERE 
    ('2022/09/28' BETWEEN LB_VAN AND LB_TOT) 
    AND (LE_ID in (8277))  
GROUP BY  
    LE_AGENDA_FK, 
    LE_CODE, LE_ID, 
    LE_KLAS_FK, 
    LE_KLASPARTITIE_FK,
    LE_OMSCHRIJVING, 
    LE_VERANDERDDOOR, 
    LE_VERANDERDOP

UNION ALL

SELECT LE_AGENDA_FK, LE_CODE, LE_ID, LE_KLAS_FK, LE_KLASPARTITIE_FK, LE_OMSCHRIJVING, LE_VERANDERDDOOR, LE_VERANDERDOP, 0 As AantalLln
FROM  LESEENHEID
WHERE 
    (LE_ID in (8277))
    -- 关键判断:仅当A.1无结果时才执行此查询
    AND NOT EXISTS (
        SELECT 1
        FROM  LESEENHEID 
        LEFT JOIN LOOPBAANLESEENHEID on (LH_LESEENHEID_FK = LE_ID)  
        LEFT JOIN LOOPBAAN ON (LH_LOOPBAAN_FK = LB_ID)    
        WHERE 
            ('2022/09/28' BETWEEN LB_VAN AND LB_TOT) 
            AND (LE_ID in (8277))  
        GROUP BY  
            LE_AGENDA_FK, 
            LE_CODE, LE_ID, 
            LE_KLAS_FK, 
            LE_KLASPARTITIE_FK,
            LE_OMSCHRIJVING, 
            LE_VERANDERDDOOR, 
            LE_VERANDERDOP
    )
ORDER BY LE_ID ROWS 1000

逻辑说明

  1. 第一部分(A.1):正常执行原聚合查询,返回符合日期条件的结果。
  2. 第二部分(A.2):通过NOT EXISTS子句检查A.1是否有返回数据:
    • 如果A.1有结果,NOT EXISTS返回假,这部分查询不会产生任何数据;
    • 如果A.1无结果,NOT EXISTS返回真,这部分查询会返回预设AantalLln=0的记录。
  3. 统一排序:将ORDER BY放在整个语句末尾,避免子查询中出现排序导致的语法问题(部分数据库不允许子查询带排序)。

备选方案(流程控制语法)

如果你的数据库支持流程控制语句(如SQL Server、MySQL),也可以用以下方式,逻辑更直观:

-- 先检查A.1是否有结果
IF EXISTS (
    SELECT 1
    FROM  LESEENHEID 
    LEFT JOIN LOOPBAANLESEENHEID on (LH_LESEENHEID_FK = LE_ID)  
    LEFT JOIN LOOPBAAN ON (LH_LOOPBAAN_FK = LB_ID)    
    WHERE 
        ('2022/09/28' BETWEEN LB_VAN AND LB_TOT) 
        AND (LE_ID in (8277))  
    GROUP BY  
        LE_AGENDA_FK, 
        LE_CODE, LE_ID, 
        LE_KLAS_FK, 
        LE_KLASPARTITIE_FK,
        LE_OMSCHRIJVING, 
        LE_VERANDERDDOOR, 
        LE_VERANDERDOP
)
BEGIN
    -- 执行A.1
    SELECT  LE_AGENDA_FK, LE_CODE, LE_ID, LE_KLAS_FK, LE_KLASPARTITIE_FK, LE_OMSCHRIJVING, LE_VERANDERDDOOR, LE_VERANDERDOP , 
            Count(LH_ID) As AantalLln  
    FROM  LESEENHEID 
    LEFT JOIN LOOPBAANLESEENHEID on (LH_LESEENHEID_FK = LE_ID)  
    LEFT JOIN LOOPBAAN ON (LH_LOOPBAAN_FK = LB_ID)    
    WHERE 
        ('2022/09/28' BETWEEN LB_VAN AND LB_TOT) 
        AND (LE_ID in (8277))  
    GROUP BY  
        LE_AGENDA_FK, 
        LE_CODE, LE_ID, 
        LE_KLAS_FK, 
        LE_KLASPARTITIE_FK,
        LE_OMSCHRIJVING, 
        LE_VERANDERDDOOR, 
        LE_VERANDERDOP
END
ELSE
BEGIN
    -- 执行A.2
    SELECT LE_AGENDA_FK, LE_CODE, LE_ID, LE_KLAS_FK, LE_KLASPARTITIE_FK, LE_OMSCHRIJVING, LE_VERANDERDDOOR, LE_VERANDERDOP,0 As AantalLln
    FROM  LESEENHEID
    WHERE (LE_ID in (8277))
    ORDER BY LE_ID ROWS 1000
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:00:55