0
我运行此查询获得0结果时,我不应该
select *
from PortalUser
where ID not in (select distinct PortalUserID from LoginHistory where LoginDateTime > '10/1/2012')
并获得0的结果。
如果我运行
select distinct PortalUserID
from LoginHistory
where LoginDateTime > '10/1/2012'
我得到预期的结果集。比方说50个结果
如果我运行
select *
from portalUser
我得到200个结果。
这是为什么?
只是要清楚。 LoginHistory表的PortalUserID不必是唯一的,但是PortalUser..ID是唯一的字段。
运行此查询
select count(ID)
from PortalUser
GO
select count(Distinct PortalUserID)
from LoginHistory where LoginDateTime > '10/1/2012''
返回119个47行
您的结果强烈建议PortalUser中列出的每个人都有LoginTimeTime> 10/1/2012。您可以通过执行'select select count(*)from PortalUser'并将它与'从LoginHistory中选择不同的PortalUserID进行比较,其中LoginDateTime> '10/1/2012' – StarPilot
我知道一个事实,即我有没有登录的用户在过去的2个月里。这是一个开发环境,其中一个用户是一名2年前辞职的开发人员。他的上次登录日期是2011年初的某个时间 –
尝试使用NOT EXISTS而不是NOT IN。无论如何,这是一个更好的模式,但是如果PortalUserID可以为空,它可能会抛弃结果。也停止使用不安全和不明确的日期时间格式。如果这被解释为1月10日而不是10月1日呢?使用YYYYMMDD仅限日期字符串文字。我怀疑它会解决这个具体问题,但这是一个更好的做法。 –