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

在SQL Server中过滤多行:匹配条件则删除同StaffID的所有行

解决方案:根据filteredID过滤并删除对应staffID的所有行

需求回顾

原始数据表示例:

staffIDnamefilteredID
1james50
1james88
1james100
2lily30
2lily60
3tom70

需求:当指定filteredID(比如50或88)时,删除所有与这些filteredID关联的staffID对应的所有行,最终得到的结果表:

staffIDnamefilteredID
2lily30
2lily60
3tom70

下面给你两种常见场景的简洁实现方案:


方案1:SQL实现

核心思路是先通过子查询找出需要排除的staffID集合,再筛选出不在该集合中的行。

假设你的表名为staff_records,目标filteredID为50和88,查询结果的代码如下:

SELECT *
FROM staff_records
WHERE staffID NOT IN (
    -- 先找出关联目标filteredID的所有唯一staffID
    SELECT DISTINCT staffID
    FROM staff_records
    WHERE filteredID IN (50, 88)
);

如果需要直接删除表中符合条件的行(注意提前备份数据):

DELETE FROM staff_records
WHERE staffID IN (
    SELECT DISTINCT staffID
    FROM staff_records
    WHERE filteredID IN (50, 88)
);

方案2:Python Pandas实现

如果你用Pandas处理DataFrame,步骤同样简洁高效:

假设你的数据框名为df,代码如下:

# 1. 提取需要排除的所有staffID(去重避免重复判断)
exclude_staff_ids = df[df['filteredID'].isin([50, 88])]['staffID'].unique()

# 2. 筛选出不属于排除列表的行,得到结果
result_df = df[~df['staffID'].isin(exclude_staff_ids)]

解释:

  • df['filteredID'].isin([50, 88])定位到所有filteredID匹配目标值的行,提取对应的staffID并去重得到exclude_staff_ids
  • ~符号表示取反,筛选出staffID不在排除列表中的所有行,就是你要的最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:55:26