我正在完成一項任務,需要我生成一個電影串列,其中顯示名稱、年份和演員編號,標題中包含“絕地武士”一詞。在演員編號列中,如果電影中有演員 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 的兩部電影。 此影像在右側顯示了所需的結果,以及我的結果在左邊
我可以在我的代碼中更改什么以獲得所需的結果?
非常感謝!
uj5u.com熱心網友回復:
您需要創建film父表和actor您留下的表,因為那可能沒有匹配的元素(您也可以使用RIGHT JOIN,但這種情況不太常見)。
然后您需要將actor表的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。
uj5u.com熱心網友回復:
為了您的目的,您的左連接是向后的,因為您需要所有匹配的電影,但只有演員時才需要:
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,則不需要 group by
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/357310.html
