SQL条件筛选需求:获取曾修ENGLISH的学生全部记录
正确筛选选修过ENGLISH的学生所有记录的SQL方案
你的原SQL语句存在两个关键问题:
COUNT(ENGLISH)是统计名为ENGLISH的字段(而非SUBJECT字段值为ENGLISH)的非空行数,逻辑错误;- 按STUDENT分组后使用
SELECT *不符合SQL规范,且分组后只能返回每组单条记录,无法获取学生的所有选课记录。
以下是几种可行的正确实现方案:
方案一:子查询+IN
SELECT * FROM TABLE1 WHERE STUDENT IN ( SELECT STUDENT FROM TABLE1 WHERE SUBJECT = 'ENGLISH' );
方案二:EXISTS关联查询
SELECT t1.* FROM TABLE1 t1 WHERE EXISTS ( SELECT 1 FROM TABLE1 t2 WHERE t2.STUDENT = t1.STUDENT AND t2.SUBJECT = 'ENGLISH' );
方案三:内连接(JOIN)
SELECT DISTINCT t1.* FROM TABLE1 t1 JOIN TABLE1 t2 ON t1.STUDENT = t2.STUDENT WHERE t2.SUBJECT = 'ENGLISH';
以上三种方案的核心逻辑一致:先筛选出所有选修过ENGLISH的学生ID,再提取这些学生的全部选课记录,最终得到符合要求的TABLE2结果。
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

