如何筛选某列值等于指定内容但不等于另一指定内容的数据?
嘿,我来给你讲讲怎么筛选某列值等于指定内容但不等于另一指定内容的数据,就用你提供的Participation表来举例说明~
筛选某列值符合「等于A且不等于B」的SQL方法
我分两种常见场景给你拆解,你可以根据实际需求套用:
场景1:同一列满足「等于X 且 不等于Y」
比如你想找出**Result列是"完赛"但不是"取消资格"**的参赛记录,SQL可以这么写:
SELECT * FROM Participation WHERE Result = '完赛' AND Result != '取消资格';
如果你习惯用标准SQL的写法,也可以用<>替代!=,两者功能完全一样:
SELECT * FROM Participation WHERE Result = '完赛' AND Result <> '取消资格';
小提醒:如果这个列允许存储
NULL值,要注意NULL和任何值比较的结果都是NULL,不会被筛选出来。如果需要排除NULL的情况,可以额外加上AND Result IS NOT NULL。
场景2:不同列分别满足「等于X」和「不等于Y」
比如你要找**已经确认参赛(Committed = true)但最终没到场参赛(Participated = false)**的记录,写法如下:
SELECT * FROM Participation WHERE Committed = TRUE AND Participated = FALSE;
进阶技巧:用IN/NOT IN处理多值情况
如果你的需求是某列要匹配多个指定值中的一个,同时排除另外一批值,比如Result是"金牌"、"银牌"但不是"未出发"、"取消资格",用IN和NOT IN能让代码更简洁:
SELECT * FROM Participation WHERE Result IN ('金牌', '银牌') AND Result NOT IN ('未出发', '取消资格');
适配你的表结构
你的Participation表还有SwimmerId、EventId、CommentCoachId这些字段,上面的例子都可以直接替换列名和目标值来使用。比如要筛选CommentCoachId等于10但不等于15的记录:
SELECT * FROM Participation WHERE CommentCoachId = 10 AND CommentCoachId <> 15;
内容的提问来源于stack exchange,提问作者Larvitar
相关产品推荐
相关产品推荐

