在 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 中删除记录的主要内容,如果未能解决你的问题,请参考以下文章