简单查询MySQL Sakila数据库

时间:2014-04-01 20:12:45

标签: mysql

我几年没有写过SQL查询,而且有点生疏。我正在尝试编写一个查询,根据给定的演员名称选择所有电影。因此,如果名为“桑德拉”,我想选择电影表中有“沙拉”的电影。在actor表的first_name或last_name中。有一个film_actor表链接这两个表,但我无法弄清楚如何正确地做到这一点。我得到的最接近的是SELECT * FROM film f INNER JOIN film_actor fa ON fa.actor_id = a.actor_id WHERE a.first_name LIKE '%sandra%';,它返回一个演员和电影的INNER JOIN表。这个结果还有一个film_id字段,我想我想用它来选择电影表中的所有电影。

2 个答案:

答案 0 :(得分:1)

使用这个:

SELECT * 
FROM film f 
INNER JOIN film_actor fa 
ON f.film_id = fa.film_id
INNER JOIN actor a
ON fa.actor_id =a.actor_id
WHERE a.first_name LIKE '%sandra%' OR a.last_name LIKE '%sandra%'

我认为名为film的表和名为film_actor的表与名为film_id的列相关联,该列是film表和FK的PK(主键) film_actor表的。如果名称不完全符合我的意思,请相应更改。

现在,如果你加入这三个表并使用上面OR子句中的WHERE语句,你就可以得到你想要的。

有关INNER JOIN工作原理的进一步文档,请查看here

答案 1 :(得分:1)

我认为这就是你想要的。

SELECT --- generally doing select * from is a bad practice
    f.films,
    a.first_name,
    a.last_name
FROM films f
JOIN film_actor fa ON fa.film_id = f.id --- JOIN defaults to INNER JOIN -- the film_actor table im assuming has an actor id and a film id to join off of
JOIN actor a ON a.id = fa.actor_id
WHERE a.last_name LIKE"%sandra%" OR a.first_name LIKE"%sandra%" --- if you want the first_name to only match "sandra" then just do = "sandra" instead of LIKE "%sandra%"