Здесь меня беспокоит еще один запрос.
Select S.ID,S.Name,S.Surname,B.Title,SB.DateAndTimeIssued FROM Students S
INNER JOIN StudentBooks SB ON
S.ID = SB.StudentID
INNER JOIN Books B
ON B.ID = SB.BookID
WHERE B.ID = @BookID
Результаты:
1 | asd | asd | Book | 2011-10-12 18:31:40.557
1 | asd | asd | Gray Book | 2011-10-12 18:36:26.950
1 | asd | asd | Gray Book | 2011-10-12 18:36:34.137
Объяснение: Этот запрос возвращает мне имена и фамилии всех студентов, которым была выдана книга с определенным идентификатором. Дата и книга, выданная им, также отображаются.
Проблема в том, что эти книги в таблице выше были назначены только одному студенту. Как мне переписать этот запрос, чтобы показать, какие ученики не получили определенную книгу с идентификатором @BookID? Когда я использую WHERE NOT B.ID = @BookID
, он только посылает мне имена студентов, которые не получили книгу, но получили книгу в прошлом.
Моя попытка:
SELECT S.Name,S.Surname FROM Students S
INNER JOIN StudentBooks SB
ON SB.StudentID = S.ID
INNER JOIN Books B
ON B.ID = SB.BookID
WHERE NOT SB.BookID = @BookID
Мне нужны имена студентов, которые вообще не получили книгу. «Студенты», «Книги учеников» и «Книги» - это отдельные таблицы, «Студенты» и «Книги учеников» оказываются в отношениях «многие ко многим», поскольку книга может быть переиздана им позднее, или копия книги может быть переиздана. выдается им, если они потеряли свои