比较3个表中列的值 - MySQL

时间:2014-04-03 17:30:11

标签: php mysql sql database-table

以下问题:

我正在使用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;

再次无效。

3 个答案:

答案 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