谁能指出以下SQL语句的错误之处:
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语句来处理这种可能性。
发布于 2012-01-31 18:13:39
对于SQL SERVER (您没有指定sql引擎),尝试使用:
SELECT ISNULL(NextDiary, 0) ...如果找不到任何行,则所有值都为null,则返回0
发布于 2012-01-31 18:16:22
您确定tblActionLinks中当前没有条目吗?如果tblActionLinks中没有条目,则外部查询应返回所有记录
发布于 2012-01-31 18:15:15
这与tblActionLinks当前为空的事实有关吗?
是的..。NULL在SQL中的处理不是很好,如果将一个值与NULL进行比较,则undifned尝试为null提供一个类似于-999的标志值:
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
https://stackoverflow.com/questions/9077715
复制相似问题