mysql - 如何连接2个表,检查它们的每个元素是否存在于3个表中并将其表示为数字

标签 mysql sql

我有这 3 个表: 1.电影

movie_id  title
  1     Toy Story (1995)
  2     Jumanji (1995)
  3     Grumpier Old Men (1995)

2.流派

 genre_id   genre
    1      Action
    2      Adventure
    3      Animation

3.movi​​es_genre

 m_g_id  movie_id   genre_id
      1     1       2
      2     2       1
      3     2       2
      4     3       1
      5     3       2
      6     3       3

我正在寻找这个:如果 movie_genre 中存在特定类型的电影,则 value=1,否则 value=1

movie_id    genre     value
   1        Action     0
   1        Adventure  1
   1        Animation  0
   2        Action     1
   2        Adventure  1
   2        Animation  0
   3        Action     1
   3        Adventure  1
   3        Animation  0

为了将电影的每个元素与性别的所有元素连接起来,我使用下面的查询,但是我不知道如何获取具体值?

SELECT movie_id,genre
FROM movies, genres 
Order by movie_id

最佳答案

您需要将交叉联接外部联接结合使用。然后您可以使用 case 语句来获取 value:

select m.movie_id,
  g.genre_id, 
  case when mg.m_g_id is null then 0 else 1 end 
from movies m 
  cross join genres g 
  left join movies_genre mg on m.movie_id = mg.movie_id 
                           and g.genre_id = mg.genre_id

关于mysql - 如何连接2个表,检查它们的每个元素是否存在于3个表中并将其表示为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35373414/

相关文章:

SQL 地理邻近查询执行时间大约需要一分钟

php - 您可以将选定的 sql 查询值存储在 url 中,然后使用 $_GET 检索它们吗?

mysql - 如何在不使用子查询的情况下编写查询?

php - SQL选择字段设置为显示的类别

php - 从 in_array 语句获取值

php - 在 MySql 中使用 IN 条件进行搜索

SQL Server 2008 不能删除约束

mysql - Hibernate CURRENT_TIMESTAMP 和 MySQL 中的多实体事务

php - mysql 在数组中的位置

c# - LINQ 的 SQL 脚本