Извлечение не связанных записей в SQL

#sql-server #database

#sql-сервер #База данных

Вопрос:

У меня есть две таблицы в базе данных

1- Файловая таблица: поля:

  • File_ID
  • Имя файла

2-Пользовательская таблица:

  • Идентификатор пользователя
  • Имя пользователя

Теперь у меня есть 3-я таблица, которая является «Назначенным файлом», которая отслеживает, какой файл назначен каким пользователям.

Поля:

  • File_ID
  • Идентификатор пользователя
  • Дата

Я хочу получить все не связанные записи, т. Е. Получить всех пользователей, которые не назначены определенному файлу.

Вот мой запрос для связанных записей.

выберите * от пользователя, которого я подключаю к FileRequested r на i.userId= r.userId где r.File_ID = 1175

Теперь я хочу получить всех пользователей, которые не назначены этому файлу

Проблема: один файл может быть назначен нескольким пользователям. Я попытался выполнить следующий запрос, но это не сработало

выберите * от пользователя, которого я подключаю к FileRequested r на i.userId= r.userId где r.File_ID != 1175 или r.File_ID равно нулю

Ответ №1:

Вы могли бы использовать NOT IN с подзапросом, если я правильно понимаю:

 SELECT *
FROM User i
WHERE i.UserID NOT IN (SELECT UserID 
                       FROM FileAssigned 
                       WHERE File_ID = 1175)
  

Ответ №2:

 SELECT * From Users as a
Where not exists(select 1 
                 from FileAssigned as b 
                 Where b.UserID=a.UserID)