我有一张标准化表:
`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不需要做我要求的事情
答案 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,它将能够检查哪些电影是相关的。