如何在 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
,但这不太常见)。
然后你需要把actor
table的条件放到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 个
,则不需要分组依据
我正在做一项作业,需要我生成一个电影列表,其中显示名称、年份和演员编号,标题中有“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
,但这不太常见)。
然后你需要把actor
table的条件放到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 个
,则不需要分组依据