我有基本的SQL技能,但我被这个难倒了:
create table scores
(
name varchar2(15),
history_grade varchar2(1),
math_grade varchar2(1)
);
insert into scores (name, history_grade, math_grade) values ('Bill', 'A', 'A');
insert into scores (name, history_grade, math_grade) values ('Sue', 'F', 'F');
insert into scores (name, history_grade, math_grade) values ('Mary', 'C', 'B');
insert into scores (name, history_grade, math_grade) values ('Austin', 'C', 'A');
insert into scores (name, history_grade, math_grade) values ('Kyle', 'B', 'B');
我想查询history_grade
和math_grade
* 都 * 不是'A'或都不是'F'的行。如果history_grade或math_grade中有一个是'A'或'F',但另一个不是'A'或'F',那么我仍然需要这一行。
我在尝试这个:
select *
from scores
where (history_grade <> 'A' and math_grade <> 'A')
and (history_grade <> 'F' and math_grade <> 'F' )
但这只返回玛丽和凯尔。我需要玛丽,凯尔和奥斯汀在结果集中,因为奥斯汀只有一个A,而不是两个A。
我希望这是有意义的,任何帮助都非常感谢!
2条答案
按热度按时间3vpjnl9f1#
可以使用
NOT IN
:也可以使用
AND
和NOT
:或:
其中所有输出:
| 名称|历史_等级|数学成绩|
| --|--|--|
| 玛丽|C| B|
| 奥斯汀|C|一|
| 凯尔|B| B|
fiddle
xam8gpfp2#
可能是这样的