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

Oracle SQL中能否使用嵌套WHERE AND子句?

在Oracle SQL中实现你需要的逻辑分组(嵌套条件)

首先明确:Oracle SQL完全支持用括号分组逻辑条件,你说的“嵌套WHERE AND子句”本质就是通过括号明确条件优先级,这是标准SQL的基础语法,完全可行。

但你当前写的and (age != 18 and hair_colour != black)不符合需求——这个条件会把「age=18但头发不是黑色」或者「头发是黑色但age≠18」的记录也一起排除,而你只想排除同时满足age=18且头发为黑色的记录。

正确的两种写法:

写法1:用NOT否定组合条件(逻辑最直观)

直接对要排除的组合条件取反:

select id from table_1 
where first_name = 'Jay' 
  and last_name = 'McDonald' 
  and NOT (age = 18 and hair_colour = 'black');

写法2:利用德摩根定律转换(等价逻辑)

NOT(A AND B)等价于NOT A OR NOT B,也可以写成:

select id from table_1 
where first_name = 'Jay' 
  and last_name = 'McDonald' 
  and (age != 18 OR hair_colour != 'black');

注意细节:

  • 你原代码里的表名tabel_1是拼写错误,应该是table_1;
  • hair_colour = black里的black是字符串常量,必须加单引号,否则Oracle会把它当成列名,引发语法错误。

这两种写法都会精准保留你需要的记录:只要first_name='Jay'和last_name='McDonald'同时满足,并且不同时符合age=18和hair_colour='black',就会被查询出来,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者another apex user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:20:31