table_name:score id name object score 1 小强 语文 85 2 小强 数学 73 7 小强 美术 90 5 小狗 语文 80 6 小狗 数学 92 9 小狗 美术 95 3 小花 语文 70 4 小花 数学 79 8 小花 美术 85 SELECT * FROM score a WHERE a.score >= 80 AND NOT EXISTS(SELECT 1 FROM score b WHERE b.`name`=a.`name` AND b.object != a.object AND b.score < 80) ORDER BY a.`name`; 该语句的思路是:查出当前用户的信息,只要不存在:同用户、不同科目、分数小于80 SELECT * FROM score a WHERE a.`name` NOT IN (SELECT DISTINCT(b.`name`) FROM score b WHERE b.score < 80) 该语句的思路是:查询每科成绩都大于80分的学生的所有科目信息,也就是说只要有一科分数小于80分的就不满足条件 相对两个语句来说,第二句思路好理解一点。应该还有其他很多种写法实现这种查询,欢迎指点!