2012-10-30 102 views
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行

+0

您的結果強烈建議PortalUser中列出的每個人都有LoginTimeTime> 10/1/2012。您可以通過執行'select select count(*)from PortalUser'並將它與'從LoginHistory中選擇不同的PortalUserID進行比較,其中LoginDateTime> '10/1/2012' – StarPilot

+0

我知道一個事實,即我有沒有登錄的用戶在過去的2個月裏。這是一個開發環境,其中一個用戶是一名2年前辭職的開發人員。他的上次登錄日期是2011年初的某個時間 –

+1

嘗試使用NOT EXISTS而不是NOT IN。無論如何,這是一個更好的模式,但是如果PortalUserID可以爲空,它可能會拋棄結果。也停止使用不安全和不明確的日期時間格式。如果這被解釋爲1月10日而不是10月1日呢?使用YYYYMMDD僅限日期字符串文字。我懷疑它會解決這個具體問題,但這是一個更好的做法。 –

回答

0

您的查詢只在您的子查詢返回的PortalUserID列表中選擇ID。 PortalUser中是否有記錄沒有從您的子查詢返回的ID。

+0

是的,我們的PortalUser表有一個ID,看起來像這個PortalUser..ID = LoginHistory..LoginID –

相關問題