【问题标题】:SQL Null value & join where not exist on other tableSQL Null 值和连接在其他表上不存在
【发布时间】:2022-01-17 11:25:11
【问题描述】:

我有这两张桌子

+-------------------+   +----------------------------------------------+   
|      movies       |   |                   ratings                    |  
+-------------------+   +----------------------------------------------+   
| Id   |    Name    |   | Id_movie   | id_user | id_rating | user_rate |
|-------------------|   |----------------------------------------------| 
| 1    |  movie 1   |   | 1          |   20    |   1       |     5     |
| 2    |  movie 2   |   | 1          |   21    |   2       |     3     |
| 3    |  movie 3   |   | 1          |   22    |   3       |     4     |
+-------------------+   | 2          |   21    |   3       |     5     |
                        | 2          |   22    |   3       |     4     |
                        | 3          |   22    |   3       |     5     |
                        +----------------------------------------------+

我想得到

+----------------------------------------+   
|                movies                  | 
+----------------------------------------+  
| Id_user   |    id_movie    |  Name     |
|----------------------------------------| 
| 20        |        2       |  movie 2  |
| 20        |        3       |  movie 3  |
+----------------------------------------+ 

用户 = 20 没有评价电影 2 和 3 的情况。这可能吗?

有人可以帮助我吗?谢谢你

【问题讨论】:

    标签: mysql sql conditional-statements


    【解决方案1】:

    您必须生成所有用户电影组合,然后测试每个组合在评分中的缺失。

    SELECT user.user id_user, 
           movies.id id_movie, 
           movies.name
    FROM ( SELECT 20 AS user ) AS user    -- needed user(s)
                                          -- for all users use 
                                          -- ( SELECT DISTINCT user FROM ratings ) AS user                                   
    CROSS JOIN movies                     -- cross join generates all combinations
    WHERE NOT EXISTS ( SELECT NULL        -- select only non-existent combinations
                       FROM ratings
                       WHERE ratings.id_user = user.user
                         AND ratings.id_movie = movies.id )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2017-11-11
      • 2013-07-17
      • 2017-08-15
      • 2022-01-22
      相关资源
      最近更新 更多