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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 查询同时满足一列中两个条件的记录相关的知识,希望对你有一定的参考价值。

如表
列1列2
a 1
a 3
b 1
c 3
需要查询列2中同时有1 和3 的列1记录, 上表查询后应只有a

字段a和字段b不同时,字段a为1的记录吗?
select
*
from
表名
where
a<>b
and
a<>1
记住a和b的类型一定要相同才行
参考技术A 我给你一个简单快捷的写法,你运行试试。。。

select 列1 from 表 where 列2 in ('1','3');
参考技术B select 列1 from 表 group by 列1 having 列2= 1 or 列2= 3 and count(*)>=2本回答被提问者采纳 参考技术C select 列1 from 表 group by 列1
having 列2=1 and 列2=3

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

【中文标题】在 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'的记录

以上是关于sql 查询同时满足一列中两个条件的记录的主要内容,如果未能解决你的问题,请参考以下文章

COUNT WHERE 在同一列中同时满足两个条件

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

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

SQL查询满足两个条件的重复记录只显示2条记录的方法

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

SQL Server:选择一列的计数,同时检查另一列中的不同值