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

Snowflake SQL查询时如何仅移除同时满足两个指定条件的记录

问题根因

你编写的WHERE子句使用AND连接两个NOT IN判断,实际表达的逻辑是:同时满足「薪资代码不是SUPA」和「岗位ID不是0000087544」两个条件的记录才会被保留,相当于直接排除了所有岗位ID为0000087544的记录、以及所有薪资代码为SUPA的记录,和你要的「仅移除同时满足两个条件的记录」需求完全不符。

解决方案

不需要使用JOIN或者子查询,直接调整WHERE条件的布尔逻辑即可实现需求,核心是把要排除的组合条件放到NOT修饰的括号内:

SELECT * 
FROM timesheets 
WHERE NOT (position_id = '0000087544' AND external_payroll_code = 'SUPA');

逻辑验证

对应你给出的示例输入:

  • 员工1A的记录同时满足position_id = '0000087544'和external_payroll_code = 'SUPA',会被NOT修饰后排除
  • 员工1B的记录仅满足薪资代码为SUPA,不满足岗位ID条件,会被保留
    最终输出完全符合你的预期。

如果要兼容字段为NULL的场景,也可以调整为NVL或者IS NOT DISTINCT FROM的写法,以上基础写法已经可以覆盖绝大多数正常考勤数据的过滤场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:36:03