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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:36:07