对于像这样的问题,我在SQL方面遇到了很多麻烦。我不知道我应该如何构建我的查询。我应该film
加入film_actor
,然后加入actor
吗?或者我应该反过来做什么?
我所能做的就是获取一个将actor
和film_actor
与名称ADAM GRANT
连接在一起的查询,但我已经迷失了从这里开始的地方。
SELECT * FROM (actor JOIN film_actor ON actor.actor_id=film_actor.actor_id) WHERE first_name = 'ADAM' AND last_name = 'GRANT'
我已经尝试过将这些结果与电影结合起来,但是我的语法出现了问题。
SELECT title FROM (actor JOIN film_actor ON actor.actor_id=film_actor.actor_id) WHERE first_name = 'ADAM' AND last_name = 'GRANT' JOIN film ON film.actor_id = actor_id
答案 0 :(得分:2)
您应该使用内部联接
SELECT
film.title
, language.name
FROM film
INNER JOIN language on film.language_id = language.language_id
INNER JOIN film_actor on film.film_id = film_actor.film_id
INNER JOIN actor on actor.actor_id = film_actor.actor_id
WHERE actor.first_name = 'ADAM'
AND actor.last_name ='GRANT'
答案 1 :(得分:0)
您可以使用NATURAL JOIN
从查询中删除范围变量(film_actor
,actor
),以及“说明明显的开花”搜索条件(actor_id = actor_id ):
SELECT title AS film_title, name AS language_name
FROM film
NATURAL JOIN film_actor
NATURAL JOIN actor
NATURAL JOIN language
WHERE first_name = 'ADAM'
AND last_name ='GRANT';
我不是思想流派的忠实粉丝,其中“语言名称”这样的数据元素只被称为name
而上下文language
应该来自表格名称。什么在Java类中运行良好并不一定转换为SQL,这就是为什么我发现我需要在查询中使用重命名(SELECT name AS language_name...
)。此外,您在name
中有一个category
属性,如果NATURAL JOIN
包括language
和category
,则会遇到问题。最好在整个模式中拥有唯一且一致的属性名称,例如,您已成功完成actor_id
。