首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中“NOT in”语句的问题

问SQL中“NOT in”语句的问题
EN

Stack Overflow用户
提问于 2012-01-31 18:10:29
回答 4查看 178关注 0票数 1

谁能指出以下SQL语句的错误之处:

代码语言:javascript
复制
SELECT DiaryType 
FROM tblDiaryTypes 
WHERE DiaryType NOT IN (SELECT NextDiary 
                        FROM tblActionLinks 
                        WHERE HistoryType = 'Info Chased');

现在嵌套的SELECT语句当前返回NULL,因为tblActionLinks中最初没有条目,我想知道这是否是问题所在。

外部的SELECT语句如果单独执行,确实会像预期的那样从tblDiaryTypes返回所有日记类型。但是,当我添加嵌套的SELECT语句以排除某些值时,整个SQL语句返回空!

这与tblActionLinks当前为空的事实有关吗?如果是这样,我如何修改我的SQL语句来处理这种可能性。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-31 18:13:39

对于SQL SERVER (您没有指定sql引擎),尝试使用:

代码语言:javascript
复制
SELECT ISNULL(NextDiary, 0)  ...

如果找不到任何行,则所有值都为null,则返回0

票数 1
EN

Stack Overflow用户

发布于 2012-01-31 18:16:22

您确定tblActionLinks中当前没有条目吗?如果tblActionLinks中没有条目,则外部查询应返回所有记录

票数 1
EN

Stack Overflow用户

发布于 2012-01-31 18:15:15

这与tblActionLinks当前为空的事实有关吗?

是的..。NULL在SQL中的处理不是很好,如果将一个值与NULL进行比较,则undifned尝试为null提供一个类似于-999的标志值:

代码语言:javascript
复制
SELECT DiaryType 
FROM tblDiaryTypes 
WHERE DiaryType NOT IN (SELECT NVL(NextDiary, -999) -- <===
                        FROM tblActionLinks 
                        WHERE HistoryType = 'Info Chased');

NVL(NextDiary, -999)表示如果为NextDiary IS NULL,则将该值替换为-999

docs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9077715

复制
相关文章

相似问题

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