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

求助:如何过滤SQL查询结果,仅保留指定vf_id的匹配记录

解决方案:筛选同时关联st_id=10和11的vf_id记录

看起来你想要的是只保留那些同时对应st_id=10和st_id=11的vf_id,去掉仅关联其中一个st_id的条目(比如你的结果里的vf_id=2和3)对吧?这里有两种常用的SQL写法可以实现你的需求:

方法1:子查询+分组筛选

先通过子查询找出满足条件的vf_id,再关联原表获取对应记录:

SELECT t.vf_id, t.st_id
FROM your_table t
WHERE t.vf_id IN (
    -- 筛选出同时关联10和11的vf_id
    SELECT vf_id
    FROM your_table
    WHERE st_id IN (10, 11)
    GROUP BY vf_id
    HAVING COUNT(DISTINCT st_id) = 2
)
AND t.st_id IN (10, 11)
ORDER BY t.vf_id, t.st_id;

原理:子查询里对vf_id分组,通过HAVING COUNT(DISTINCT st_id) = 2确保这个vf_id同时存在st_id=10和11的记录,再用这个vf_id列表去原表过滤,就能得到你想要的结果。

方法2:窗口函数筛选

用窗口函数直接给每个vf_id标记关联的st_id数量,再过滤:

SELECT vf_id, st_id
FROM (
    SELECT 
        vf_id, 
        st_id,
        -- 计算每个vf_id关联的不同st_id数量
        COUNT(DISTINCT st_id) OVER (PARTITION BY vf_id) AS st_count
    FROM your_table
    WHERE st_id IN (10, 11)
) sub_query
WHERE st_count = 2
ORDER BY vf_id, st_id;

原理:窗口函数PARTITION BY vf_id会给每个vf_id分组计算关联的不同st_id总数,之后只保留总数为2的记录,就能得到目标结果。

这两种方法都能帮你得到期望的输出:

vf_id --> st_id
--------------
1 --> 10
1 --> 11

内容的提问来源于stack exchange,提问作者AnCo ngCo Danh Bun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:28:16