查找拥有colors表全部颜色的人员姓名SQL语句正确性咨询
结论
你编写的SQL语句不能正确实现需求。
原因分析
你现有SQL的逻辑是关联两张表后对first_name去重,只要某个人员有至少1条对应颜色的记录就会被查询返回。按照你提供的测试数据运行该SQL,会返回所有出现在Persons表里的人员姓名,完全不满足「拥有全部颜色对应记录」的筛选要求。
正确SQL写法
思路是先统计颜色总数量,再按人员姓名分组,筛选出关联的不同颜色ID数量等于总颜色数的人员即可:
SELECT P.first_name AS NAMES FROM Persons P JOIN Colors C ON C.id = P.colorid GROUP BY P.first_name HAVING COUNT(DISTINCT P.colorid) = (SELECT COUNT(*) FROM Colors);
运行上述SQL后,你提供的测试数据中只会返回Mona这一个结果,符合预期要求。
内容的提问来源于stack exchange,提问作者khxcenooe
相关产品推荐
相关产品推荐

