以下问题:
我正在使用3张桌子=演员,电影,角色。我试图找到一个给定演员的所有电影,说'罗宾威廉姆斯'已经通过比较特定的演员ID,因为可能有不止一个同名的演员。 actors表具有以下相关列:first_name,last_name,id - movies表具有列:id(电影的id) - 并且roles表具有:actor_id和movie_id。
我是否加入表格或使用UNION?当列具有不同的名称时,如何比较不同表中的列?
谢谢!
仅供参考:
表演员:
mysql> SELECT *
-> FROM actors;
+--------+--------------------+------------------------+--------+------------+
| id | first_name | last_name | gender | film_count |
+--------+--------------------+------------------------+--------+------------+
| 933 | Lewis | Abernathy | M | 1 |
| 2547 | Andrew | Adamson | M | 1 |
| 2700 | William | Addy | M | 1 |
表电影:
mysql> SELECT *
-> FROM movies;
+--------+------------------------------+------+------+
| id | name | year | rank |
+--------+------------------------------+------+------+
| 10920 | Aliens | 1986 | 8.2 |
| 17173 | Animal House | 1978 | 7.5 |
| 18979 | Apollo 13 | 1995 | 7.5 |
表格角色:
mysql> SELECT *
-> FROM roles;
+----------+----------+-------------------------------+
| actor_id | movie_id | role |
+----------+----------+-------------------------------+
| 16844 | 10920 | Lydecker |
| 36641 | 10920 | Russ Jorden |
| 42278 | 10920 | Cpl. Dwayne Hicks |
起初我尝试将每个检查设置为等于PHP变量并比较它们但看起来不对,然后我尝试了:
mysql> SELECT roles.actor_id, roles.movie_id, movies.id, actors.id
-> FROM roles
-> JOIN movies, actors
-> ON roles.actor_id = actors.id && roles.movie_id =movies.id;
再次无效。
答案 0 :(得分:1)
终于想通了..
>SELECT m.name, m.year
-> FROM movies m
->JOIN roles r ON m.id = r.movie_id
->JOIN actors a ON a.id = r.actor_id
->WHERE a.first_name = "whatever actor's first name"
->AND a.last_name = "whatever actor's last name"
这将为您提供两列相应的名称和年份! hazzah!
答案 1 :(得分:0)
首先阅读this answer - 经过多年的工会后,它最终会让我点击,然后加入,反之亦然。
在这种情况下,你肯定应该加入,因为你希望结果作为一行。
(想想这样 - 我想看电影,演员 - >一起作为一个结果)
<强> PS 强>
你不再需要你的电影统计字段了,因为一旦你有了联接,你就可以使用MySQL COUNT
- &gt;它会使维护更容易。
答案 2 :(得分:0)
您需要join
。试试这个:
SELECT A.first_name,A.last_name,A.gender,M.name,M.year,M.rank,R.role
FROM roles R INNER JOIN
Movies M ON R.movie_id = M.movie_id INNER JOIN
Actors A ON R.actory_id = A.id