繁体   English   中英

SQL:如何通过元素之一从结果集中排除组,而不使用子查询

[英]SQL: How to exclude group from result set by one of the elements, not using subqueries

输入:

id    group_id    type_id    
1     1           aaaaa          
2     1           BAD
3     2           bbbbb
4     2           ccccc
5     3           ddddd
6     3           eeeee
7     3           aaaaa
  1. 我需要输出group_id ,它仅由type_id <> 'BAD'的成员组成。 具有至少一名BAD成员的整个团体应被排除在外
  2. 不允许使用子查询(或CTE或NOT EXISTS或视图或T-SQL内联函数)!
  3. 不允许使用except
  4. 不允许使用游标。

任何欺骗上述规则的解决方案都应受到赞赏。 任何RDBMS都可以。

产生正确结果的不良示例解决方案,(使用except ):

select distinct group_id
from input
except
select group_id
from input
where type_id = 'bad'
group by group_id, type_id

输出:

group_id
2
3

我只使用group byhaving

select group_id
from input
group by group_id
having min(type_id) = 'good' and max(type_id) = min(type_id);

此特定版本假定type_id (如问题中所示)不采用NULL值。 它很容易修改以考虑到这一点。

编辑:

如果您正在寻找一种不好的方法,请执行以下操作:

select group_id
from input
where type_id = 'bad'
group by group_id;

group_id并计数'BAD'

select group_id
from mytable
group by group_id
having count(case when type_id = 'BAD' then 'count me' end) = 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM