从不同的表中选择数据

时间:2014-06-16 23:13:14

标签: mysql imdb

我在我的服务器上使用imdb,并且正在尝试为它创建一个搜索引擎。

这部电影必须在不到11年的时间内发行,并且必须使用相同的语言。

如果所有数据都在同一个表中,这将很容易。

标题

id|title|release_year

movie_info:

id|movie_id|info_type|info

获取您使用的语言:

select * from movie_info where movie_id = MOVIEID and info_type_id = 8;

那么如何将这两个陈述结合起来:

select * from title where release_year > 2000 AND release_year < 2010;
select * from movie_info where movie_id = MOVIE ID OF FIRST STATEMENT and info_type_id = 8;

如果您需要更多信息或者我要求的是不可能的,请说出来!

1 个答案:

答案 0 :(得分:0)

以下查询应该可以解决问题。它分别从title表和movie_info表中返回标题和电影信息。显然,如果需要,您可以返回更多列。

选择了左连接,因为您可能会在titles数据库中拥有movie_info中没有相应数据的电影。你肯定想要了解左连接和内连接(稍后会详细介绍),并了解它们之间的区别。您可能还应该仔细检查您的数据,以查看标题中有多少电影在movie_info中没有相应的记录。在上面的评论中,每个RandomSeed,你的问题是一个非常基本的常见问题。我要回答。但是在我这样做的时候,我也会给你一些功课。查找内连接和左连接,并确定结果集所需的连接。还要确保所有标题中的电影都在movie_info中有相应的记录。如果不清楚如何做到这一点,有很多关于SO的问题可以帮助你。

现在,请注意WHERE条件已使用BETWEEN重写。介于两者之间,因此像你这样的开放时间间隔需要将年份递增一。再次,做作业。值得一看。

现在,作为奖励提示,我建议在它前面使用EXPLAIN运行此查询。出于性能原因,这很重要。您可以在此处详细了解:http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/

SELECT  t.title AS movie_title, m.info AS movie_information
FROM title AS t
LEFT OUTER JOIN movie_info AS m
ON t.id =m.movie_id
WHERE m.info_type_id = 8 
AND t.release_year BETWEEN 2001 AND 2009
;