我有2个表,第一个名为movie_list
的表包含以下列:
id
actors
movie_id
imdb_id
名为movie_genre
的第二个包含以下内容:
id
movie_id
genre_id
所以我做了一个简单的查询:
SELECT movie_list . * , movie_genre.genre_id
FROM movie_list, movie_genre
WHERE movie_genre.movie_id = movie_list.movie_id
AND movie_genre.genre_id
IN ( 12, 35, 878 )
它工作正常。
现在我想对此查询的结果做一些事情,就像一个简单的事情:
SELECT tbl1.movie_id FROM
(SELECT movie_list . * , movie_genre.genre_id
FROM movie_list, movie_genre
WHERE movie_genre.movie_id = movie_list.movie_id
AND movie_genre.genre_id
IN ( 12, 35, 878 ))as tbl1
它不起作用
我被困了,我的子查询做错了什么?
答案 0 :(得分:0)
您可以使用显式连接表示法重写您的第一个查询:
SELECT l.*, g.genre_id
FROM movie_list AS l
JOIN movie_genre AS g ON l.movie_id = g.movie_id
WHERE g.genre_id IN (12, 35, 878)
然后,您应该能够将其作为子查询嵌入到FROM子句中:
SELECT t.movie_id
FROM (SELECT l.*, g.genre_id
FROM movie_list AS l
JOIN movie_genre AS g ON l.movie_id = g.movie_id
WHERE g.genre_id IN (12, 35, 878)
) AS t
但是,据我所知,这与您编写的查询是同构的。
你说"不工作,卡住"没有解释这意味着什么。说"不起作用"在SO方面存在问题。当你说"卡住"时,你的意思是它在合理的时间内没有返回任何数据吗?你应该澄清你的问题。
您可能需要指定正在使用的MySQL版本以及您正在使用的平台。
此外,每个表中有多少行,以及它们在哪里有索引?只要您有movie_list.movie_id
(唯一)或movie_genre.movie_id
(由于影片可以同时属于多种类型而允许重复)或两者都有索引,您就不会遇到严重的性能问题。