簡體   English   中英

如何在SQL中查找不匹配記錄的列表? (有麻煩)

[英]How to find a list of non-matching records in SQL? (Having some trouble)

我有2張桌子。

用戶 -每個用戶有1行,包含以下列:

  • 用戶身份
  • 的LastAccessTime

這顯示了上次有人在建築物中某處使用其鑰匙的時間。

事件 -每個用戶有多行,使用以下列記錄每個事件:

  • 事件ID
  • EVENTTIME
  • 用戶身份
  • EventTypeID

這顯示了有人使用密鑰的每個實例。 當某人進入建築物或“時鍾進入”時,EventTypeID為70。

我正在嘗試進行查詢,以顯示正在使用他們的密鑰但在某天未使用其密鑰來注冊其入口的人。

對於正確執行此操作的用戶,以下內容將適用:

  • Users.LastAccessTime>'2017-02-28'(又名今天的日期)
  • 最新情況下的Events.EventTypeID = 70還將在同一行上包含Events.EventTime>'2017-02-28'

但是我需要的是不遵守建築物規則的人員清單。

感謝您的任何幫助。

您的問題提示“ NOT EXISTS或“ NOT IN 我認為這是您想要的邏輯:

Users.LastAccessTime>'2017-02-28'(又名今天的日期)Events.EventTypeID = 70的最新情況也將在同一行中包含Events.EventTime>'2017-02-28'

select u.*
from users u
where u.LastAccessTime > cast(getdate() as date) and  -- in the building today
      not exists (select 1
                  from events e
                  where e.UserId = u.UserId and
                        e.EventTypeID = 70 and
                        e.EventTime > cast(getdate() as date)
                 );

這將返回今天進入但今天沒有活動70的人。

您需要加入表並獲取在符合您的規則的事件表中沒有記錄的UserID

SELECT Users.userID 
FROM Users
LEFT JOIN Events ON Users.userID = Events.UserID
    AND Events.EventTypeID = 70 
    AND Events.EventTime >= CONVERT(DATE, GETDATE())
WHERE EventID IS NULL 
    AND Users.LastAccessTime >= CONVERT(DATE, GETDATE())

如果我理解您的問題,我認為您正在尋找以下查詢:

select * 
from Users as u,Event as e
where u.UserID=e.UserID and 
     (Users.LastAccessTime < CONVERT (date, GETDATE()) Or 
      Events.EventTypeID <> 70 or  
      Events.EventTime < CONVERT (date, GETDATE()));

我用來連接兩個表的第一個條件。 和我使用的其他條件相反,它們之間的OR應該會發生什么。 因此,如果有一個不遵守一個或多個條件的用戶,則結果將被查詢選擇。

這是您想要的嗎?

SELECT U.USERID FROM USERS U
LEFT JOIN EVENTS E
ON
U.USERID=E.USERID
WHERE (E.USERID IS NULL OR U.LastAccessTime <> '2017-02-28' OR E.EventTypeID <>70 OR E.EventTime <> '2017-02-28') --if any of the above condition is Violated, their ID will be dispalyed in the select clause

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM