如何编写SQL查询class与account_class表中user1未选择的课程
现有SQL问题排查
- 用户名匹配错误:你的需求是筛选未被
user1选择的课程,但原语句子查询中筛选的用户名为faraazap,和目标用户不符。 - 缺少表关联条件:原
NOT EXISTS的子查询没有和外层class表做关联,判断逻辑是「整张account_class表是否存在用户faraazap的记录」,而不是判断「当前课程是否被目标用户选择」,完全不符合业务逻辑。
正确实现方案
方案1:修正NOT EXISTS写法
补全关联条件、修正匹配用户名即可:
SELECT class.* FROM class WHERE NOT EXISTS ( SELECT * FROM account_class WHERE account_class.username_account = 'user1' AND account_class.id_class = class.id );
方案2:LEFT JOIN实现
也可以用左连接的方式实现,逻辑更直观:
SELECT class.* FROM class LEFT JOIN account_class ON class.id = account_class.id_class AND account_class.username_account = 'user1' WHERE account_class.id IS NULL;
两种方案执行后都会返回你预期的id为3、4的两条未选课记录。
内容的提问来源于stack exchange,提问作者user9567039
相关产品推荐
相关产品推荐

