比方说,我们有一个数据库,记录用户尚未评分的所有电影。每个评级都记录在一个MovieRating表格中。NOT IN查询有哪些替代方法?
当我们正在寻找电影的用户#1234还没有见过的:
SELECT *
FROM Movies
WHERE id NOT IN
(SELECT DISTINCT movie_id FROM MovieRating WHERE user_id = 1234);
查询NOT IN可以像MovieRating的规模增长非常昂贵。假设MovieRatings可以有100,000多行。
我的问题是什么是一些更有效的替代NOT IN查询?我听说过LEFT OUTER JOIN和NOT EXIST查询,但还有其他什么吗?有什么办法可以设计不同的数据库吗?
什么是您的DBMS? (还提到你不想'JOIN'查询 - 但它是一个选项) –
你正在假设一个特定的执行策略。例如,SQL Server不关心你如何编写这个查询。 – usr
Postgres,但我愿意使用其他任何东西,包括nosql或图形数据库 - 只要它可以解决这个问题:) – user3481946