我正在解决SQL上的Codewars问题,但我可以得到我需要的东西
给出DVD Rental样本数据库中的film_actor和影片表 找到所有电影Sidney Crowe(actor_id = 105)和Salma Nolte (actor_id = 122)一起投入并订购结果集 按字母顺序。
Column | Type | Modifiers
------------+-----------------------------+----------
title | character varying(255) | not null
film_id | smallint | not null
Column | Type | Modifiers
------------+-----------------------------+----------
actor_id | smallint | not null
film_id | smallint | not null
last_update | timestamp without time zone | not null
Column | Type | Modifiers
------------+-----------------------------+----------
actor_id | integer | not null
first_name | character varying(45) | not null
last_name | character varying(45) | not null
last_update | timestamp without time zone | not null
这是我应该得到的结果:
title
Antitrust Tomatoes
Clones Pinocchio
Oz Liaisons
Siege Madre
但我得到了这个:
Title
Alaska Phantom
Alien Center
American Circus
Antitrust Tomatoes
Artist Coldblooded
Candidate Perdition
Clones Pinocchio
.....
这是我的查询
select title from ( film
inner join film_actor on film.film_id=film_actor.film_id)
inner join actor on film_Actor.actor_id=actor.actor_id
where actor.actor_id=122 or actor.actor_id=105
答案 0 :(得分:0)
你必须做这样的事情......
SELECT f.title
FROM film f INNER JOIN film_actor fa ON f.film_id = fa.film_id
WHERE fa.actor_id IN (105, 122)
GROUP BY f.title
HAVING COUNT(*) = 2
ORDER BY f.title
计数(*)将等于您需要匹配的演员数量。如果你需要使用名称加入,那么你也需要添加actor表,否则id就在film_actor表中。你在这里做的是用所有可用的演员计算所有电影,然后看看哪个电影被列出两次(演员的数量)。任何被列为演员数量多次的电影都是该电影中所有必需演员的电影。