这是我想要实现的目标: 1.从users表中提取用户ID(documents.ownerID是Users.Handle的外键) 2. 对于在过去 90 天内没有在文档表中创建的记录的用户
这是我到目前为止的查询(我通过 SQL Studio Management 2012 运行该查询):
Select Users.UserID
From Documents
Inner Join Users on documents.OwnerID = users.handle
Where Not Exists
(
Select *
From Documents
Where documents.creationtime >= Dateadd(day, -90, getutcdate())
)
Group by Users.UserID
Order by Users.UserID ASC
输出中没有返回任何内容。但是,当我从“不存在”语句中删除“不”时,我得到了在过去 90 天内在文档表中创建了记录的用户的输出。另外,如果我将 ">= 指示符更改为“=”,我也会收到输出。我认为问题在于我对 EXIST 语句没有牢固的理解。我非常感谢你的帮助。
最佳答案
原因是因为你的子查询不相关。因此,where
子句的意思是:创建时间超过 90 天的文档中不存在任何记录。存在这样的记录,因此 where
子句总是失败。
我的猜测是您希望用户这样做。如果是这样,请尝试这个 where
子句:
where not exists (select *
from documents d2
where d2.creationtime >= Dateadd(day, -90, getutcdate()) and
d2.OwnerId = users.handle
)
关于SQL "Where Not Exists"未返回任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16450849/