You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL多列条件查询问题:筛选符合特定成绩规则的记录

Oracle SQL 查询条件修正方案

问题根源

你的原查询错误地使用了AND连接两个条件,导致只筛选出同时满足两科都不是A、且两科都不是F的行,这就把Austin这类「一科是A、另一科不是」的合法数据排除了,不符合需求。

根据需求,我们需要排除的只有两种极端情况:

  • 历史和数学成绩都是'A'
  • 历史和数学成绩都是'F'
    其余所有行(包括一科是A/F、另一科不是的,以及两科都不是A/F的)都需要保留。

正确查询语句

方案一:调整逻辑运算符(替换AND为OR)

把原条件中的AND改成OR,只要满足「两科都不是A」或者「两科都不是F」就会被选中,完全覆盖需求:

select * 
from scores 
where (history_grade <> 'A' and math_grade <> 'A')
   OR (history_grade <> 'F' and math_grade <> 'F' )

方案二:反向排除(更直观)

直接排除掉不符合要求的两种情况,剩下的就是目标结果:

select * 
from scores 
where not (
    (history_grade = 'A' and math_grade = 'A')
    OR (history_grade = 'F' and math_grade = 'F')
)

验证结果

执行上述任意语句后,返回的结果集如下:

namehistory_grademath_grade
MaryCB
AustinCA
KyleBB

完全符合你需要的结果,排除了Bill(双A)和Sue(双F)。

内容的提问来源于stack exchange,提问作者John k.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:22:32