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
相关产品推荐
相关产品推荐

