使用group by和count in语句实现find contains many的另一种做法

接上一篇文章一个实现类似find contains many(many in many)的sql 语句,原文使用了group by,另外使用了子句的count case when来做条件的过滤。经过笔者的再三实践,发现了另一种做法,即直接在子查询中使用count语句和in的组合来实现这种操作。

原要求:查询即有名字叫张三,也有名字叫李四的班的名字。
翻译为:查询班信息,其中要求学生名字中存在张三,李四的名字的人数至少大于等于2。(不考虑名字重复)

根据这个实现,以下即为完整的sql语句,能够完美地实现这个操作:

select * from class t where (select count(1) from student where classid = t.id and name in (张三,李四)) >= 2

这种做法,即是直接在谓语上使用count语句,并对count子句做过滤操作。
本实现暂未考虑效率问题,不知道和上一篇文章,哪个效率更好一些。