如何在两个需要加入的表中查询特定类型的电影名称?

时间:2017-03-25 04:02:45

标签: mysql sql database join

目标是列出特定类型的所有电影,例如' Adenture'。

我有两张桌子:

(1) movies
  id
  name
  rank
  year
  PRIMARY

(2) movies_genre
  genre
  movie_id

我使用以下命令加入了它们:

mysql> SELECT * FROM movies LEFT JOIN movies_genres on movies.id = movies_genres.movie_id;

结果是这个(缩短):

| id     | name        | year | rank | movie_id | genre     |
+--------+-------------+------+------+----------+-----------+
| 930905 | TestMovie   | 2000 |    4 |   9309   | Music     |
| 991327 | Get Swift   | 2016 |   10 |   991327 | Adventure |
| 991326 | CommunityO  | 2016 |   10 |   991326 | Comedy    |
| 192017 | Lil Mermaid | 1989 |  7.3 |   192017 | Family    |
| 192017 | Lil Mermaid | 1989 |  7.3 |   192017 | Animation |

那么如何列出说“冒险”

的电影

注意:我是sql的新手,并且已经完成了一些艰难的练习。我花了很多时间在这上面,并且无处可去,这是我的最后一招。

谢谢。

2 个答案:

答案 0 :(得分:2)

正如评论中所述,您正在寻找WHERE声明。

SELECT * FROM movies 
LEFT JOIN movies_genres 
ON movies.id = movies_genres.movie_id
WHERE movies_genres.genre = "Adventure"

参考:https://www.w3schools.com/sql/sql_where.asp

答案 1 :(得分:2)

尝试:您必须在genre添加条件,如果您只需要从两个类型中选择那些类型为Adventure的记录,那么我想建议INNER JOIN代替LEFT JOIN,但这取决于您的要求。检查以下解决方案:

SELECT * 
FROM movies m 
INNER JOIN movies_genres mg on m.id = mg.movie_id
    AND mg.genre = 'Adventure'

如果您真的不希望column names中的所有列而不是SELECT *

,请定义SELECT m.id, m.name, mg.genre....,以避免选择不必要的列