SQL语句报错求助:查询符合指定条件且不在另一表中的记录
修正你的SQL语句并实现需求
嗨,我注意到你这条SQL执行失败了,问题出在一个简单的语法错误上——你连续写了两个WHERE关键字,这会让数据库解析器直接报错哦!结合你的需求,我帮你修正并优化了语句:
基础修正版SQL(匹配你的原始逻辑)
SELECT * FROM homework WHERE crn = 138628 AND id NOT IN (SELECT id FROM studentHw WHERE codigoAlumno = "214521671");
这里只去掉了重复的WHERE,保留了你原本的查询逻辑:先筛选出studentHw表中对应学生的作业ID,再从homework表中找出CRN为138628且不在这个ID列表里的作业数据。
更稳定的替代写法(避免NOT IN的潜在坑)
如果studentHw表的id字段可能存在NULL值,NOT IN会导致结果不符合预期(因为NULL的比较逻辑特殊),这时候用LEFT JOIN的写法更可靠:
SELECT h.* FROM homework h LEFT JOIN studentHw sh ON h.id = sh.id AND sh.codigoAlumno = "214521671" WHERE h.crn = 138628 AND sh.id IS NULL;
这个逻辑是:把homework和目标学生的studentHw记录按作业ID关联,最后筛选出那些没有匹配到学生提交记录的作业,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

