SQL如何编写WHERE子句实现仅当两个条件同时满足时排除对应行
正确写法及原理说明
你要实现的是仅排除同时满足两个条件的行,其余行全部保留,本质是对需要排除的条件组合整体取反,直接用NOT()包裹要排除的条件组即可,写法如下:
SELECT * FROM table WHERE NOT ( start_num = end_num AND time_taken < 100 )
原有写法错误原因
你之前编写的(start_num <> end_num and tripduration > 100)逻辑是「只有两个条件同时满足才保留行」,和需求不符,会遗漏两类本应返回的行:
start_num <> end_num但time_taken < 100的行start_num = end_num但time_taken >= 100的行
另外还要注意你误将原条件中的time_taken字段写为了tripduration,也会导致结果不符合预期。
等价展开写法
根据布尔逻辑的德摩根定律,NOT (A AND B)等价于NOT A OR NOT B,你也可以写成展开的OR形式:
SELECT * FROM table WHERE start_num <> end_num OR time_taken >= 100
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

