在 Snowflake SQL 中同时满足两个条件时从 Select 中删除记录

Posted

技术标签:

【中文标题】在 Snowflake SQL 中同时满足两个条件时从 Select 中删除记录【英文标题】:Remove records from Select when both conditions are met in Snowflake SQL 【发布时间】:2021-08-12 04:21:06 【问题描述】:

当满足此条件时,我正在尝试从 CTE 中删除记录 -

删除针对职位 ID 0000087544 的时间表,支付代码为 SUPA

select * from timesheets where ( (external_payroll_code not in ('SUPA')) and (position_id  not in ('0000087544')) )

正在删除所有记录 position_id = '0000087544',而我只希望删除 external_payroll_code = 'SUPA' 的那些职位 ID。

有没有一种方法可以将 SELECT 中的条件排除指定为 Snowflake SQL 中的子查询,或者编写 JOIN 子句作为唯一出路。

任何提示将不胜感激。谢谢!

输入

Employee ID POSITION ID EXTERNAL PAYCODE
1A 0000087544 SUPA
1B 00000888888 SUPA

输出

Employee ID POSITION ID EXTERNAL PAYCODE
1B 00000888888 SUPA

【问题讨论】:

我认为这可以通过一些 AND/OR 逻辑来完成。你能告诉我们一些输入数据和期望的结果吗? 【参考方案1】:

您只需要稍微更改一下 AND/OR 逻辑即可。

with timesheets as (select $1 employee_id, $2 position_id, $3 external_payroll_code from values ('1A',  '0000087544',   'SUPA'), ('1B', '00000888888',  'SUPA'))

select * from timesheets where not (external_payroll_code in ('SUPA') and position_id  in ('0000087544'))

EMPLOYEE_ID POSITION_ID EXTERNAL_PAYROLL_CODE
1B  00000888888 SUPA

【讨论】:

感谢 Nat,感谢您的回答,该解决方案有效。由于团队正在等待交货以进行快速修复,因此我在表中添加了一个额外的列作为exclude_flag ``` 然后在最后的 cte 操作中只选择了 exclude_flag 标记为'N'的记录

以上是关于在 Snowflake SQL 中同时满足两个条件时从 Select 中删除记录的主要内容,如果未能解决你的问题,请参考以下文章

sql同时满足两个条件的语法怎样写?要用where语句

sql语句查询,根据一个表中一个列,该列在两个不同条件同时满足的查询结果

sql 查询同时满足一列中两个条件的记录

SQL同时查两个条件

countif同时满足两个条件

在 Snowflake 中,为啥当你同时分配两个变量时,变量有 256 字节的限制?