Oracle 中只有一个条件时 NOT IN

Mr *_*017 0 sql oracle

我想仔细检查一下:

如果您使用带有 NOT IN 条件的 WHERE 子句,并且只有一个条件,是否必须将该条件保留在括号中?

因此,在下面的子句中,如果删除 Y 和 Z,X 是否必须保留在括号中(参见WHERE NOT IN CLAUSE下面的第二个)。

WHERE LastEditedBy NOT IN ('X','Y','Z') 

WHERE LastEditedBy NOT IN ('X') 
Run Code Online (Sandbox Code Playgroud)

Ale*_*ole 6

文档中的语法图显示了所需的括号,但没有它们也能工作:

select * from dual where dummy not in 'Y';

DUMMY
-----
X
Run Code Online (Sandbox Code Playgroud)

select * from dual where dummy in 'X';

DUMMY
-----
X
Run Code Online (Sandbox Code Playgroud)

两者都返回数据。

数据库<>小提琴

无论如何,包含括号并不会让你付出任何代价,让你与官方语法保持一致(正如 @jarlh 指出的,依赖未记录的行为是不明智的),对于其他人来说,查看你的代码可能不会那么混乱。代码,并且如果您稍后需要向列表添加更多值,将使将来的维护稍微容易一些。

  • 我永远不会依赖这种未记录的“功能”来构建应用程序。 (2认同)