Oto, co próbuję osiągnąć: 1. Wyciągnij ID użytkownika z tabeli użytkowników (documents.ownerID jest obcym kluczem Users.Handle) 2. Dla użytkowników którzy nie mają rekordu, który został utworzony w tabeli dokumenty w ciągu ostatnich 90 dniSQL "Where Not Exists" nie zwraca żadnych wierszy
Oto zapytanie, że mam tak daleko (używam tego poprzez SQL Management Studio 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
Nic nie jest zwracane na wyjściu. Jednak po usunięciu "Not" z instrukcji "Not Exists" otrzymuję dane wyjściowe użytkowników, którzy mają rekord utworzony w tabeli dokumentów w ciągu ostatnich 90 dni. Ponadto, jeśli zmienię wskaźnik "> =" na "=", również otrzymam dane wyjściowe. Myślę, że problem polega na tym, że nie mam pełnego zrozumienia stwierdzenia EXIST. Bardzo doceniam twoją pomoc.
Moje rozumienie „nie istnieje” jest to, że to zapytanie zwróci wszystko, co nie jest zawarte w pod-zapytaniu, czy to prawda? Tak więc, jeśli użytkownik nie miałby utworzonego rekordu w ciągu 90 dni, to zostałby on zwrócony w moim konkretnym zapytaniu (po wprowadzeniu zmian przez Gordona lub kurs), prawda? Dzięki za pomoc. – user2124571
Tak, zazwyczaj chcesz połączyć podkwerendę NOT EXISTS z głównym zapytaniem. Tak więc w oryginale mówiliście: "zdobądźcie mi rekordy, jeśli nie ma wiersza w dokumentach z ostatnich 90 dni". W Gordon's, on mówi, "weź mi wszystkie rekordy, których użytkownik nie ma pokrewnego dokumentu z ostatnich 90 dni". Mam nadzieję, że to pomogło. – Aushin
To absolutnie pomogło, dziękuję !! – user2124571