我几年没有写过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字段,我想我想用它来选择电影表中的所有电影。
答案 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%"