Mysql 将3个选项压缩为一个表

Mysql 将3个选项压缩为一个表,mysql,Mysql,这三种说法(为简单起见有点做作)是: 我想做两件事: 将以上三个连接到一个ID表中,该ID表与电影的所有三个ID都匹配 执行所有这些查询以减少MySQL读取以提高性能 我相信有一个简单的方法可以做到这一点,但我不是最强的SQL用户,所以感谢所有的帮助 Select count(distinct movie_ID), user_ID from table where move_Id in (1,2,3) group by user_ID Having count(distinct Movie_I

这三种说法(为简单起见有点做作)是:

我想做两件事:

  • 将以上三个连接到一个ID表中,该ID表与电影的所有三个ID都匹配
  • 执行所有这些查询以减少MySQL读取以提高性能
  • 我相信有一个简单的方法可以做到这一点,但我不是最强的SQL用户,所以感谢所有的帮助

    Select count(distinct movie_ID), user_ID 
    from table where move_Id in (1,2,3)
    group by user_ID
    Having count(distinct Movie_ID) = 3
    

    这样做的目的是获得每个用户ID的不同电影计数。然后将结果限制为仅计数为3的用户。

    我认为最简单的方法是:

    SELECT user_id FROM table_name WHERE movie_id IN (1,2,3);
    

    或者,您可以使用xQbert建议的UNION方法,但我会运行EXPLAIN查询,以查看哪个SQL语句提供了最有效的结果。

    我的理解是,在替换多个OR的情况下,在我的情况下,他们需要拥有所有的影片抱歉,在原始请求中不清楚。我已经修改了查询,以统计每个用户电影ID的不同出现次数。如果您可以保证一个用户与一个电影ID只有0或1个关联,并且只有0和1个关联,那么您就不需要该地区了。您可以解释解释查询吗?请参阅MYSQL参考手册中的解释:
    SELECT user_id FROM table_name WHERE movie_id IN (1,2,3);