Вычтите таблицу из другой таблицы в Access - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть 3 таблицы - Users, Images и Users_Images. Каждый пользователь может купить много изображений, и каждое изображение может быть куплено несколькими пользователями. Поля таблиц следующие:

Users - Id, UserName, Password

Images - Id, Name, Description, Path

Users_Images - UserId, ImageId, PurchaseDate. (Все отношения между таблицами установлены) Я пытаюсь создать запрос, который выберет таблицу со всеми изображениями, которые не были куплены конкретным пользователем Мой алгоритм состоял в том, чтобы выбрать таблицу со всем изображением, которое было куплено конкретным пользователем, и вычесть его из полной таблицы изображения. Но независимо от того, как я пытался написать это как запрос, он всегда давал мне неправильные или не полные результаты. Некоторые из запросов, которые я пробовал:

SELECT Id, [Name], Description, Path 
FROM Images
EXCEPT
SELECT Id, [Name], Description, Path 
FROM Images AS I INNER JOIN Users_Images AS UI
ON I.Id = UI.ImageId
WHERE UserId = 1

OR

SELECT Id, [Name], Description, Path 
FROM Images
WHERE NOT EXISTS (
SELECT Id, [Name], Description, Path 
FROM Images AS I INNER JOIN Users_Images AS UI
ON I.Id = UI.ImageId
WHERE UserId = 1)

Я также искал решение здесь и на других сайтах, но ни один из них не работал.

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Ваша вторая версия должна быть соотнесена:

SELECT im.*
FROM Images im
WHERE NOT EXISTS (SELECT 1
                  FROM Images AS I INNER JOIN 
                       Users_Images AS UI
                       ON I.Id = UI.ImageId
                  WHERE UI.UserId = 1 AND I.Id = im.Id
                 ); 
0 голосов
/ 15 ноября 2018

Это у вас работает?

SELECT Id, [Name], Description, Path 
FROM Images as I
WHERE NOT EXISTS (SELECT 1
                  FROM Users_Images AS UI
                  WHERE UI.ImageId = I.Id AND
                        UI.UserId = 1
                 );

Это просто возвращает все изображения, у которых нет строк в user_images, где идентификатор пользователя равен 1.

0 голосов
/ 15 ноября 2018

использование not in

select im.Name,im.Description,im.Path from Images im where im.id not in (

select i.id Users_Images ui join Images i on ui.ImageId=i.id
join Users u on ui.UserId=u.Id
where u.UserId=1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...