Mysql 使用复杂子查询在SQL中练习
我正在尝试用SQL进行查询。该数据库是IMBD数据库中的一个。表格如下: 所以,我需要电影《低俗小说》中的男演员/女演员ID=2175869,他们从未在其他电影中与另一个低俗小说的男演员/女演员合作 应该是这样的:Mysql 使用复杂子查询在SQL中练习,mysql,sql,database,relational-database,Mysql,Sql,Database,Relational Database,我正在尝试用SQL进行查询。该数据库是IMBD数据库中的一个。表格如下: 所以,我需要电影《低俗小说》中的男演员/女演员ID=2175869,他们从未在其他电影中与另一个低俗小说的男演员/女演员合作 应该是这样的: SELECT person_id FROM cast_info WHERE movie_id = 2175869 AND person_id NOT IN (SELECT ) 但是我不知道如何做第二部分。查询稍后用作子查询,返回除低俗小说以外的电影,其中有一个以上的低俗小说演员在其
SELECT person_id FROM cast_info WHERE movie_id = 2175869 AND
person_id NOT IN (SELECT )
但是我不知道如何做第二部分。查询稍后用作子查询,返回除低俗小说以外的电影,其中有一个以上的低俗小说演员在其中扮演
SELECT movie_id
FROM cast_info
WHERE
movie_id <> 2175869 AND
person_id IN (SELECT person_id FROM cast_info WHERE movie_id = 2175869)
GROUP BY movie_id
HAVING COUNT(*) > 1
现在让那些从未在这样一部电影中出演过低俗小说的人来看看
SELECT person_id
FROM cast_info
WHERE
movie_id = 2175869 AND
person_id NOT IN (
SELECT person_id FROM cast_info WHERE movie_id IN (
SELECT movie_id
FROM cast_info
WHERE
movie_id <> 2175869 AND
person_id IN (SELECT person_id FROM cast_info WHERE movie_id = 2175869)
GROUP BY movie_id
HAVING COUNT(*) > 1
)
)
注:我假设每部电影只能选一名演员。如果同一个演员可以在同一部电影中扮演不同的角色,则用COUNTDISTINCT person_id替换COUNT*。首先,您需要查看《低俗小说》中的所有演员:
SELECT person_id as pulp_actor_id
FROM cast_info
WHERE movie_id = 2175869
然后你需要找到所有演员对决:
SELECT c1.person_id as actor1_id
c2.person_id as actor2_id
FROM cast_info c1
JOIN cast_info c2
ON c1.person_id < c2.person_id
WHERE c1.movie_id = 2175869
AND c2.movie_id = 2175869;
找到除了低俗小说之外,两人一起表演的所有电影
SELECT actor1_id, actor2_id, actor1_movies.movie_id
FROM (SELECT c1.person_id as actor1_id
c2.person_id as actor2_id
FROM cast_info c1
JOIN cast_info c2
ON c1.person_id < c2.person_id
WHERE c1.movie_id = 2175869
AND c2.movie_id = 2175869) as duos
JOIN cast_info as actor1_movies
ON duos.actor1_id = actor1_movies.person_id
AND actor1.movie_id <> 2175869
LEFT JOIN cast_info actor2_movies
ON duos.actor2_id = actor2_movies.person_id
AND actor1_movies.movie_id = actor2_movies.movie_id
WHERE actor2.movie_id IS NOT NULL;
现在把所有的演员都从低俗小说中选出来,而不是最后的结果
SELECT person_id as pulp_actor_id
FROM cast_info c
LEFT JOIN ( SELECT actor1_id, actor2_id, actor1_movies.movie_id
FROM (SELECT c1.person_id as actor1_id
c2.person_id as actor2_id
FROM cast_info c1
JOIN cast_info c2
ON c1.person_id < c2.person_id
WHERE c1.movie_id = 2175869
AND c2.movie_id = 2175869) as duos
JOIN cast_info as actor1_movies
ON duos.actor1_id = actor1_movies.person_id
AND actor1.movie_id <> 2175869
LEFT JOIN cast_info actor2_movies
ON duos.actor2_id = actor2_movies.person_id
AND actor1_movies.movie_id = actor2_movies.movie_id
WHERE actor2.movie_id IS NOT NULL;
WHERE movie_id = 2175869 ) as duos
ON c.person_id IN ( actor1_id, actor2_id )
WHERE duos.movie_id IS NULL
@萨米:我不太确定。你指的是与@Harshil相同的问题吗?是的,他指的是与mineOkey相同的问题。好的,谢谢,我现在正在学习。我找不到一张表格,上面列出了一个人/导演/演员的所有电影电影id。请帮帮我。@JaimeAlcántaraArnela你将如何匹配这个title.id=cast\u info.person\u id?这两个都是不同的na?谢谢,我会试试,但这需要时间,我会把结果发布给你。Hola Jaime,检查Olver的答案,比我的简单。Muy honesto por tu parte Juan Carlos,gracias,voy a elloChecking,这是一个非常大的数据库,所以需要时间,但它运行正常。知道,我迟早会发布结果的。谢谢