任何人都可以指出以下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语句来处理这种可能性。
答案 0 :(得分:1)
对于SQL SERVER(您没有指定sql引擎),请尝试使用:
SELECT ISNULL(NextDiary, 0) ...
如果没有找到任何行,则所有值都为null,那么它将返回0
答案 1 :(得分:1)
您确定目前tblActionLinks中没有条目吗?如果tblActionLinks中没有条目,则外部查询应返回所有记录
答案 2 :(得分:0)
这是否与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
答案 3 :(得分:0)
我会按以下方式重写您的查询:
SELECT DiaryType
FROM tblDiaryTypes
WHERE NOT EXISTS (SELECT NextDiary
FROM tblActionLinks
WHERE HistoryType = 'Info Chased'
AND NextDiary = DiaryType)
这确保了正确的行为,无论ANSI_NULLS设置如何,您都不必担心正确选择ISNULL(NextDiary, 0)
返回的魔术值(如果DiaryType
等于tblDiaryTypes
,那该怎么办? }?)