首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle中的查询不符合AND和WHERE条件

Oracle中的查询不符合AND和WHERE条件
EN

Stack Overflow用户
提问于 2019-03-01 07:59:17
回答 1查看 51关注 0票数 0

我在Oracle中有以下查询:

代码语言:javascript
复制
SELECT serverHostName,
      operatingSystem,
      serverClass
FROM Server_Inventory A
WHERE A.serverHostName NOT IN 
    (SELECT rltd_ServerHostname
     FROM App_Server_Relationship)
AND A.serverHostName NOT IN 
    (SELECT rltd_ServerHostname
     FROM DataBase_Server_Relationship)
AND A.operatingSystem NOT IN ('OS1','OS3','OS5')
AND A.serverClass NOT IN ('CLASS_3','CLASS_6');

我试图从我的Server_Inventory表中获取没有链接或关联的应用程序和数据库的服务器列表。我确实得到了一些结果,但在一些手动验证之后,我注意到一些服务器正在被排除,尽管它们不属于排除条件。例如,假设我有一个名为"Server_24GW1“的服务器。如果我像这样执行查询:

代码语言:javascript
复制
SELECT serverHostName,
      operatingSystem,
      serverClass
FROM Server_Inventory A
WHERE A.serverHostName NOT IN 
    (SELECT rltd_ServerHostname
     FROM App_Server_Relationship)
AND A.serverHostName NOT IN 
    (SELECT rltd_ServerHostname
     FROM DataBase_Server_Relationship)

在查找Server_24GW1服务器时,我得到了以下结果:

代码语言:javascript
复制
serverHostName   |  operatingSystem   | serverClass
----------------------------------------------------
Server_24GW1     |   (null)           |  CLASS_10

但是如果我使用以下条件执行查询,则意味着:

代码语言:javascript
复制
AND A.operatingSystem NOT IN ('OS1','OS3','OS5')
AND A.serverClass NOT IN ('CLASS_3','CLASS_6');

当我尝试查找Server_24GW1时,我什么也得不到,即使operatingSystemserverClass不属于排除条件。

有人知道我可能做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 08:07:52

空值的工作方式与其他任何值都不同

尝尝这个。尽管它可能会停止在operatingSystem上使用索引,但逻辑会按照您想要的方式工作。

代码语言:javascript
复制
AND NVL(A.operatingSystem,' ') NOT IN ('OS1','OS3','OS5')

或者这个

代码语言:javascript
复制
AND (A.operatingSystem NOT IN ('OS1','OS3','OS5') OR A.operatingSystem IS NULL)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54936094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档