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

如何在MSSQL查询中排除存在Solved='FR'记录的同一ID的所有行?

解决方案:MSSQL中排除包含特定记录的ID组

当然可以直接通过SQL语句实现这个需求,完全不用在Python/JavaScript里做二次过滤。你的核心需求是保留那些整个ID分组中从未出现过Solved='FR'的所有行,下面给你几种在MSSQL里高效可行的方案:

方法1:使用NOT EXISTS(推荐,性能优异)

这是最直观且MSSQL优化器处理得最好的写法之一,逻辑是检查当前行的ID下是否存在Solved='FR'的记录,不存在则保留该行:

SELECT ID, ID2, AnotherCondition, Steps, Process, Solved
FROM YourTable t
WHERE NOT EXISTS (
    SELECT 1
    FROM YourTable t2
    WHERE t2.ID = t.ID
      AND t2.Solved = 'FR'
)

替换YourTable为你的实际表名即可。如果ID列有索引,这个查询的性能会非常好。

方法2:使用LEFT JOIN过滤

先提取所有包含Solved='FR'的ID,再通过左连接排除这些ID的所有行:

SELECT t.*
FROM YourTable t
LEFT JOIN (
    -- 先找出所有有FR记录的ID
    SELECT DISTINCT ID
    FROM YourTable
    WHERE Solved = 'FR'
) fr_ids ON t.ID = fr_ids.ID
-- 过滤掉匹配到FR ID的行
WHERE fr_ids.ID IS NULL

方法3:使用窗口函数(适合复杂分组场景)

通过窗口函数统计每个ID下Solved='FR'的记录数,再过滤掉计数大于0的行:

WITH IdFrStats AS (
    SELECT 
        *,
        -- 统计当前ID下FR记录的数量
        COUNT(CASE WHEN Solved = 'FR' THEN 1 END) OVER(PARTITION BY ID) AS fr_record_count
    FROM YourTable
)
SELECT ID, ID2, AnotherCondition, Steps, Process, Solved
FROM IdFrStats
WHERE fr_record_count = 0

这三种方法都能精准返回你需要的结果:仅保留ID为1、3、5的所有行,完全排除ID为2、4、6的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:29:08