我已经查看过“一个表中的数据而不是其他SQL”的其他示例,但仍然无法解决这个问题。
表“图片”包含:
表“评级”包含:
我想选择特定用户中评分表中没有条目的所有图片,而图片所有者不是该用户。
例如,我可能想要选择用户5未评级但不是所有者的所有图片。
通常这将是图片和评级之间的连接,并检查评级记录是否为空,但我似乎无法仅为特定用户做到这一点。
我该怎么做?我希望尽可能避免使用子选择。谢谢。
答案 0 :(得分:3)
您需要将其他检查添加到连接谓词,而不是在where子句中。
类似
SELECT *
FROM pictures p LEFT JOIN
ratings r ON p.ID = r.PictureID AND r.UserID = 5
WHERE r.ID IS NULL
AND p.OwnerID <> 5
看看这个例子
答案 1 :(得分:0)
select *
from pictures as p
where p.owner <> 5
and not exists(select * from ratings where picture = p.id and userby = 5)
p.owner <> 5
exists(subquery)
不幸的是,你需要的结果不能通过一步组合(没有子选择)产生,因为这样做需要一个操作,它可以组合存在的东西(任何不属于用户的图片)与不存在的东西(用户缺少评级) 。
如果有一些表包含用户没有评价某些图片的事实,那么就有可能! SQL可以使用仅存在的东西进行操作。这不是exists(subquery)
所做的 - 它意识到用户没有对图片给出评级这一事实。