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

SQL Server中如何筛选IO列无'o'的Serial行?

刚好碰到过类似的筛选需求,在SQL Server里有几种实用的实现方法,我给你逐一说明:

方法一:使用NOT EXISTS子查询(最直观的逻辑)

这种方式直接针对每条记录,检查对应的Serial是否存在'o'的记录,不存在就保留当前行:

SELECT s.Serial, s.IO
FROM YourTableName s
WHERE NOT EXISTS (
    SELECT 1
    FROM YourTableName
    WHERE Serial = s.Serial
      AND IO = 'o'
);

说明:记得把YourTableName替换成你实际的数据表名称,子查询的作用是验证当前Serial有没有'o'的记录,没有的话就会保留原表中的该行。

方法二:使用GROUP BY + HAVING分组筛选

先按Serial分组,过滤掉包含'o'的分组,再关联原表获取具体的记录行:

SELECT s.Serial, s.IO
FROM YourTableName s
INNER JOIN (
    SELECT Serial
    FROM YourTableName
    GROUP BY Serial
    HAVING COUNT(CASE WHEN IO = 'o' THEN 1 END) = 0
) filtered_serials ON s.Serial = filtered_serials.Serial;

说明:分组后的HAVING子句会统计每个Serial中IO='o'的数量,等于0就代表这个Serial没有任何'o'的记录,之后关联原表就能拿到所有符合条件的行。

方法三:使用EXCEPT运算符排除不符合的Serial

先获取所有Serial,再排除那些存在'o'的Serial,最后用这些合格的Serial筛选原表:

SELECT s.Serial, s.IO
FROM YourTableName s
WHERE s.Serial IN (
    SELECT Serial FROM YourTableName
    EXCEPT
    SELECT Serial FROM YourTableName WHERE IO = 'o'
);

说明:EXCEPT会返回仅在第一个结果集存在的Serial(也就是没有'o'记录的Serial),再用这个集合去筛选原表的行即可。

这几种方法都能得到你想要的结果,其中NOT EXISTS在大多数情况下性能表现不错,推荐优先尝试哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:19:04