SQL查询不返回预期结果(Join 3 tables)

时间:2017-12-21 21:25:50

标签: mysql

我正在解决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

1 个答案:

答案 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表中。你在这里做的是用所有可用的演员计算所有电影,然后看看哪个电影被列出两次(演员的数量)。任何被列为演员数量多次的电影都是该电影中所有必需演员的电影。