sql查询获取具有多个条件的数据

Posted

技术标签:

【中文标题】sql查询获取具有多个条件的数据【英文标题】:sql query to get data with multiple condition 【发布时间】:2019-03-06 12:08:55 【问题描述】:

具有三列的表 ta

A | B | C
1 |11| 0
1 |12| 0
1 |13| 0
2 |33| 5
2 |34| 10
2 |35| 78
5 |45| 0
5 |49| 0
5 |51| 0
8 |10| 0
8 |14| -1
8 |34| -2

我正在寻找 SQL 查询来获取不同的 A 值,该值对于所有 B 具有 C 值为零。 (即输出为 1 & 5)

【问题讨论】:

标记您实际使用的数据库引擎。 mysql和sql server使用的方言不同。 【参考方案1】:

您可以使用group byhaving

select a
from t
group by a
having min(c) = 0 and max(c) = 0;

【讨论】:

【参考方案2】:

试试这个:

select distinct A from [dbo].[table] where A not in ( select A from [dbo].[table] where C <> 0)

【讨论】:

【参考方案3】:

您可以检查 C 的平均值,如果它为 0,则 B 的所有 C 值都为零,

SELECT A 
FROM table
GROUP BY A
HAVING SUM(ABS(C))=0

【讨论】:

mod() 是做什么的?因为它不是 tsql 函数。 是的 abs() 一定没问题。 虽然SUM(ABS(C)) = 0 更好。 是的,确实会改变【参考方案4】:

你可以这样做:

select t.*
from table t
where t.c = 0 and
      not exists (select 1 from #tm t1 where t1.a = t.a and t1.c < 0) 

【讨论】:

【参考方案5】:

NOT EXISTS:

select distinct a from tablename t
where not exists (
  select 1 from tablename 
  where 
    a = t.a
    and
    c <> 0
)

【讨论】:

【参考方案6】:

试试这个:

 Select 
 A
 from #tmp
 group by A 
 Having 
 count(*)=count(case when c=0 then 0 else null end)

【讨论】:

【参考方案7】:

对于 SQL Server:

SELECT A FROM ta
EXCEPT
SELECT A FROM ta WHERE C <> 0

【讨论】:

以上是关于sql查询获取具有多个条件的数据的主要内容,如果未能解决你的问题,请参考以下文章

具有多个条件的数据表选择SQL查询问题

在 AND 内具有多个 OR 条件的 SQL 查询返回 null 或空

具有多个可能连接(或连接中的条件)的 SQL 查询

如何使用具有多个连接的 SQL 查询并使用休眠计数

SQL查询语句查询多个数据

无法获取具有 SQL 等条件的核心数据