[英]How to find non-matching records between 2 tables not having any unique keys
[英]How to find a list of non-matching records in SQL? (Having some trouble)
我有2張桌子。
用戶 -每個用戶有1行,包含以下列:
這顯示了上次有人在建築物中某處使用其鑰匙的時間。
事件 -每個用戶有多行,使用以下列記錄每個事件:
這顯示了有人使用密鑰的每個實例。 當某人進入建築物或“時鍾進入”時,EventTypeID為70。
我正在嘗試進行查詢,以顯示正在使用他們的密鑰但在某天未使用其密鑰來注冊其入口的人。
對於正確執行此操作的用戶,以下內容將適用:
但是我需要的是不遵守建築物規則的人員清單。
感謝您的任何幫助。
您的問題提示“ 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.