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

请求协助合并SQL查询:从test_run查询结果中排除指定folder_id数据

解决SQL查询排除特定folder_id记录的问题

我来帮你搞定这个问题!你之前用EXCEPT没达到预期效果的核心原因很明确:EXCEPT要求两个查询返回的列数、顺序和数据类型必须完全一致,你第一个查询返回了3列(d, r, f),但第二个查询只返回1列,两者根本无法匹配,所以逻辑上不成立。

下面给你三种可行的解决方案,都是针对你的需求专门设计的:

方案1:使用NOT IN子查询(最直观)

直接在主查询的WHERE条件里过滤掉需要排除的folder_id:

SELECT name AS d, test_run_id AS r, folder_id AS f 
FROM test_run
WHERE folder_id NOT IN (
    -- 保留你原本获取排除folder_id的子查询逻辑
    SELECT folder_id 
    FROM folder 
    WHERE name IN (
        SELECT column_value 
        FROM TABLE (apex_string.split(config.get('ATM_DASHBOARD_CONFIGURATION_FOLDER_EXCLUDE'), ','))
    )
);

这种写法逻辑清晰,先通过子查询拿到所有需要排除的文件夹ID,再在主查询中过滤掉这些ID对应的测试运行记录。

方案2:使用NOT EXISTS(处理NULL更安全)

如果你的folder表中可能存在folder_id为NULL的情况,NOT IN会出现意外结果(因为NULL的比较逻辑特殊),这时候NOT EXISTS是更稳妥的选择:

SELECT tr.name AS d, tr.test_run_id AS r, tr.folder_id AS f 
FROM test_run tr
WHERE NOT EXISTS (
    SELECT 1
    FROM folder f
    -- 关联主查询的folder_id
    WHERE f.folder_id = tr.folder_id
      AND f.name IN (
          SELECT column_value 
          FROM TABLE (apex_string.split(config.get('ATM_DASHBOARD_CONFIGURATION_FOLDER_EXCLUDE'), ','))
      )
);

NOT EXISTS会逐行检查主查询的记录,确认不存在满足排除条件的关联文件夹记录,避免了NULL值带来的问题。

方案3:使用LEFT JOIN + WHERE IS NULL(性能友好)

如果你的数据量较大,这种左连接的方式在某些数据库中性能会更优:

SELECT tr.name AS d, tr.test_run_id AS r, tr.folder_id AS f 
FROM test_run tr
LEFT JOIN folder f
    ON tr.folder_id = f.folder_id
    -- 把排除条件放在JOIN的ON子句里
    AND f.name IN (
        SELECT column_value 
        FROM TABLE (apex_string.split(config.get('ATM_DASHBOARD_CONFIGURATION_FOLDER_EXCLUDE'), ','))
    )
-- 只保留没有匹配到排除文件夹的test_run记录
WHERE f.folder_id IS NULL;

这种方式通过左连接将test_run和需要排除的文件夹记录关联,然后筛选出没有匹配到的记录,也就是我们需要保留的内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:19:08