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

Oracle SQL查询结果过滤求助:多SUBTEST关联数据集筛选需求

Oracle SQL 查询结果过滤方案

嗨,我来帮你梳理下针对这个Oracle SQL查询结果的过滤方案,先把你的背景信息整理清楚:

你的原始查询(修正了语法小问题)

SELECT TABLE1.TEST, TABLE2.SUB_TEST, TABLE3.RUN_NAME 
FROM TABLE1, TABLE2, TABLE3, TABLE4 
WHERE -- 这里是你写的若干LIKE检索条件

当前返回的结果示例

TESTSUB_TESTRUN_NAME
TEST1SUBTEST149_4021
TEST1SUBTEST249_4021
TEST1SUBTEST149_4033
TEST1SUBTEST249_4033
TEST2SUBTEST150_2122
TEST2SUBTEST250_2122

已知每个TEST都对应2个及以上SUB_TEST,下面针对几种常见的过滤需求给你具体实现方案:


场景1:只保留完整包含某TEST所有SUBTEST的RUN_NAME记录

比如你想确保,只有当某个RUN_NAME下,对应TEST的所有子测试都存在时,才保留这个RUN_NAME的所有记录。可以用分组统计来验证完整性:

WITH original_results AS (
    SELECT TABLE1.TEST, TABLE2.SUB_TEST, TABLE3.RUN_NAME 
    FROM TABLE1, TABLE2, TABLE3, TABLE4 
    WHERE -- 你的LIKE过滤条件
)
SELECT r.*
FROM original_results r
JOIN (
    SELECT TEST, RUN_NAME
    FROM original_results
    GROUP BY TEST, RUN_NAME
    -- 统计当前RUN_NAME下该TEST的SUB_TEST数量,和该TEST的总SUB_TEST数对比
    HAVING COUNT(DISTINCT SUB_TEST) = (
        SELECT COUNT(DISTINCT SUB_TEST) 
        FROM original_results r2 
        WHERE r2.TEST = r.TEST
    )
) valid_runs ON r.TEST = valid_runs.TEST AND r.RUN_NAME = valid_runs.RUN_NAME;

场景2:筛选特定SUB_TEST的记录

如果只是想保留某个特定的子测试(比如只看SUBTEST1),直接在WHERE条件里加过滤即可:

SELECT TABLE1.TEST, TABLE2.SUB_TEST, TABLE3.RUN_NAME 
FROM TABLE1, TABLE2, TABLE3, TABLE4 
WHERE -- 你的LIKE过滤条件
  AND TABLE2.SUB_TEST = 'SUBTEST1';

要是想排除某个子测试,把=换成<>就好。

场景3:去除重复的记录

如果你的结果里有重复的TEST+SUB_TEST+RUN_NAME组合,想只保留一条,用DISTINCT最简单:

SELECT DISTINCT TABLE1.TEST, TABLE2.SUB_TEST, TABLE3.RUN_NAME 
FROM TABLE1, TABLE2, TABLE3, TABLE4 
WHERE -- 你的LIKE过滤条件;

如果需要更精准的去重(比如基于某个表的主键来保留最新/最早的记录),可以用窗口函数ROW_NUMBER():

WITH original_results AS (
    SELECT TABLE1.TEST, TABLE2.SUB_TEST, TABLE3.RUN_NAME,
           -- 按组合分组,给每组记录编号
           ROW_NUMBER() OVER (PARTITION BY TABLE1.TEST, TABLE2.SUB_TEST, TABLE3.RUN_NAME ORDER BY TABLE1.TEST) AS rn
    FROM TABLE1, TABLE2, TABLE3, TABLE4 
    WHERE -- 你的LIKE过滤条件
)
SELECT TEST, SUB_TEST, RUN_NAME
FROM original_results
WHERE rn = 1; -- 只保留每组的第一条

如果你的过滤需求不是上面这些,可以具体说说你想要保留/排除哪些记录,我再帮你调整方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:48:22