基于其他表

时间:2016-11-29 10:06:17

标签: mysql

我有一张标准化表:

`Table: TheMovies`
id      | MovieName 
---------------------
1       | Zootopia 
2       | Moana 
3       | Toy Story

`Table: TheGenres`
id      | GenreName 
---------------------
21      | Action 
22      | Animation 
23      | Adventure

`Table: mMoviesGenres`
movieID | genreID 
---------------------
1       | 21 
1       | 23 
2       | 22
2       | 21 
3       | 23
3       | 21

一切正常,但我需要一个查询,它会向我展示相同类型的相似电影(在我们的例子中,我们需要类似的MovieID = 1的电影,它应该输出MovieID = 3作为结果)。

你能给我一个SQL查询,所以我有一个基本的想法,那就是能够创建更高级的查询吗?

到目前为止,我的查询是:

SELECT 
    TheMovies.* 
FROM 
    mMoviesGenres 
        JOIN TheMovies ON mMoviesGenres.movieID = TheMovies.id 
WHERE 
    mMoviesGenres.genreID IN 
        (
            SELECT 
                genreID 
            FROM 
                mMoviesGenres 
            WHERE 
                movieID = 1
        )

**在我的意见中,表:TheMovies不需要做我要求的事情

2 个答案:

答案 0 :(得分:2)

尝试此查询:

SELECT m2.movieId
FROM mMoviesGenres m1
INNER JOIN mMoviesGenres m2
    ON m1.genreID = m2.genreID
WHERE m1.movieId = 1 AND
      m2.movieId <> 1
GROUP BY m2.movieId
HAVING COUNT(*) = (SELECT COUNT(*) FROM mMoviesGenres WHERE movieId = 1)

<强>更新

如果你想找到至少与两种类型相似的电影,那么请使用这个HAVING条款:

HAVING COUNT(*) >= 2

答案 1 :(得分:0)

SELECT M.id FROM TheMovies M 
LEFT JOIN mMoviesGenres MG ON M.id = MG.movieID 
LEFT JOIN TheGenres G ON MG.genreID = G.id

你的尝试在附近,但你的错误顺序。从TheMovies开始,因为它包含您所使用的ID。然后添加mMoviesGenres,因为它是您要匹配的两个表之间的链接。最后添加Genres,它将能够检查哪些电影是相关的。

相关问题