我有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)
我也在这里和其他网站上搜索解决方案,但是没有一个起作用。
答案 0 :(得分:0)
使用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
)
答案 1 :(得分:0)
您的第二个版本需要关联:
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
);
答案 2 :(得分:0)
这对您有用吗?
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
);
这只是返回用户ID为1的user_images
中没有行的所有图像。