首页 > 解决方案 > 搜索不属于关系 n:m 的多行

问题描述

类似的问题在这里

与上面的问题非常相似但略有不同,我需要在电影列表中找到至少没有看过一部电影的用户列表。

假设有两个表 'movies' 和 'users',它们之间有一个 n:m 关系,并且一个表 'seen' 描述了这种关系。

我需要从给定列表中找出任意数量的给定用户任意数量的给定电影,所有用户都没有看过至少一部给定的电影。

这可以在单个查询中实现吗?我想不出办法。

编辑:这是一个尝试解决问题的演示,问题在于它返回的用户没有看过给定列表中的所有电影。我们需要的是一个没有看过该列表中任何电影的用户:http ://rextester.com/DEIH39789

标签: mysqlsql

解决方案


考虑用户和电影表之间的:m 关系,中间表见。

SELECT * FROM Users u WHERE NOT EXISTS (SELECT UserId FROM Seen s WHERE s.UserId = u.ID)

此查询将返回在 Seen 表中没有任何相关记录的用户


推荐阅读