SQL如何筛选不存在指定元素的用户:查询未持有Iphone的人员姓名
可行实现方案
假设你的表名为 user_items,可选用以下任意一种方法实现需求:
方法1:NOT IN 子查询(逻辑最易理解)
先查询所有持有Iphone的人员名单,再筛选不在该名单内的人员即可:
SELECT DISTINCT Name FROM user_items WHERE Name NOT IN ( SELECT Name FROM user_items WHERE Items = 'Iphone' );
方法2:分组聚合判断(性能更优,适合大数据量场景)
按人员姓名分组,通过聚合函数判断每个分组内是否不存在Iphone的持有记录:
SELECT Name FROM user_items GROUP BY Name HAVING SUM(CASE WHEN Items = 'Iphone' THEN 1 ELSE 0 END) = 0;
方法3:LEFT JOIN 反匹配
左连接持有Iphone的人员集合,匹配结果为空的即为未持有Iphone的人员:
SELECT DISTINCT u1.Name FROM user_items u1 LEFT JOIN user_items u2 ON u1.Name = u2.Name AND u2.Items = 'Iphone' WHERE u2.Name IS NULL;
内容的提问来源于stack exchange,提问作者smitz
相关产品推荐
相关产品推荐

