我正在處理3個表格:actors,films和actor_film。演員和電影只有2個字段:id(主鍵)和名字。 Actor_film也有兩個字段,演員和電影,這兩個字段分別代表演員和電影ID。所以如果一部電影裏面有4個演員,就會有4部actor_film條目和4部不同的演員。嵌套SELECT語句重複條目和COUNT
我的問題是,鑑於某個演員的ID,我想返回該電影中的演員ID,演員姓名,電影名稱和演員總數。但是,我想要展示的唯一演員是包含某些字母的演員。
讓我通過一個例子來說明問題。說湯姆漢克斯只有兩部電影,阿甘正傳和拯救大兵瑞恩,而且我正在尋找那些兩部電影中名字中都有「加里」或「馬特」的演員。進一步假設在阿甘正傳中有4個演員,在Saving Private Ryan中有5個演員。然後,我唯一會想回報將是(沒有列名,當然)
actor id | actor name | film name | # actors
abcdefg | Gary Sinise | Forrest Gump | 4
hijklmn | Matt Damon | Saving Private Ryan | 5
opqrstu | Paul Giamatti | Saving Private Ryan | 5
目前,我對那裏的方式75%通過:
SELECT actor.id, actors.name, films.name,
FROM (
SELECT actor_film.film
FROM actor_film, actors
WHERE actor_film.actor = actors.id
) AS a, actor_film, actors, films
WHERE actor_film.film = a.film
AND actors.id = actor_film.actor
AND films.id = a.film;
這是返回的東西,如:
arnie | Arnold Schwarzenegger | Around the World in 80 Days
arnie | Arnold Schwarzenegger | Around the World in 80 Days
對於有2個演員在其中的電影。換句話說,我無法將電影中所有不同的演員都拉出來,但隱含地明確地指出了這一點,並且沒有明確地使用COUNT
。
無論如何,我想我正在尋找某種INNER JOIN
或嵌套SELECT
,但我是SQLite3的新手,不知道如何將它們結合在一起。任何解決方案都會很棒,而且最重要的解釋也會很棒。
謝謝!如果我想進一步只顯示其名字包含某些字母的演員,我會在那裏放置?在第一個JOIN? – ohjava
@ohjava - 我爲你放了一個where子句的例子。 – Hogan