如何从user_article表中查询无文章在指定数组内的用户
问题描述
现有user_article表,包含user、article两个字段,样例数据如下:
| user | article |
|---|---|
| 1 | 52 |
| 1 | 104 |
| 2 | 12 |
| 3 | 5 |
| 3 | 4 |
需求:给定目标文章集合(3,4,52),查询没有任何关联文章属于该集合的所有用户,预期返回结果为用户2。
可用查询方案
方案1:NOT EXISTS 实现(推荐,性能更优)
逻辑为直接排除所有存在关联文章在目标集合内的用户,匹配效率更高:
SELECT DISTINCT `user` FROM user_article ua WHERE NOT EXISTS ( SELECT 1 FROM user_article ua_in WHERE ua_in.`user` = ua.`user` AND ua_in.article IN (3,4,52) );
方案2:分组聚合实现
按用户分组后统计命中目标集合的文章数量,筛选数量为0的用户:
SELECT `user` FROM user_article GROUP BY `user` HAVING COUNT(IF(article IN (3,4,52), 1, NULL)) = 0;
两种方案执行后均返回用户2,符合预期结果。
内容的提问来源于stack exchange,提问作者Gabi
相关产品推荐
相关产品推荐

