如何在 Join 中包含 Null 值

How to include Null values in Join

我正在做一项作业,需要我生成一个电影列表,其中显示名称、年份和演员编号,标题中有“JEDI”一词。在演员编号列中,如果电影中有演员 3,则只显示演员编号 3,否则显示 null。按片名排序。

我目前的代码如下:

select film_actor.film_id, title, actor_id from film_actor
left join film
on film.film_id = film_actor.film_id
where actor_id in (select actor_id from film_actor where actor_id = "3")
and title like "%JEDI%"
group by film_id
order by title

这只输出匹配 actor_id = "3" 的结果,但不显示标题中有 "JEDI" 但 actor_id 不是 3 的两部电影。 This image shows the desired result on the right, and my result on the left

我可以在我的代码中更改什么以获得所需的结果?

非常感谢!

您需要将 film 设为父级 table,将 actor 设为您离开时加入的 table,因为后者可能没有匹配元素(您也可以使用 RIGHT JOIN,但这不太常见)。

然后你需要把actortable的条件放到ON条件里,而不是WHERE.

SELECT film.film_id, film.title, film_actor.actor_id
FROM film
LEFT JOIN film_actor
ON film.film_id = film_actor.film_id AND film_actor.actor_id = 3
WHERE title LIKE '%JEDI%'
ORDER BY title

这里不需要GROUP BY

你的左连接是向后的,因为你想要所有匹配的电影,但只有演员有一个:

select film.film_id, title, actor_id
from film
left join film on film.film_id = film_actor.film_id and film_actor.actor_id = "3"
where title like "%JEDI%"
order by title

如果每部电影最多 actor_id 3 个

,则不需要分组依据