我正在使用电影数据库进行更多的 JOIN 操作。我的问题是关于问题 #16:列出所有与“Art Garfunkel”合作过的人
您需要首先获取 Art Garfunkel 所在的所有电影作为一个值,然后通过将其与第一个值进行比较来获取同一部电影中的所有人员姓名。
我提出了自己的查询,按逻辑它应该可以工作,但不是由于超时(我假设这是由于查询效率低下)
我的查询:
SELECT DISTINCT a.name
FROM actor a
JOIN casting b ON (a.id=b.actorid)
JOIN movie c ON (b.movieid=c.id)
WHERE c.title IN(SELECT z.title
FROM movie z
JOIN casting y ON (z.id=y.movieid)
JOIN actor x on (y.actorid=x.id)
WHERE x.name='Art Garfunkel')
另一个版本:
SELECT DISTINCT actor.name
FROM movie,actor,casting
WHERE movie.id=casting.movieid
AND actor.id=casting.actorid
AND movie.title IN(SELECT movie.title
FROM movie,actor,casting
WHERE movie.id=casting.movieid
AND actor.id=casting.actorid
AND actor.name='Art Garfunkel')
这两个都会引发解析错误,说明尝试查询上面显示的内容时出现超时。
他们提供的被接受为答案的查询版本是:
SELECT DISTINCT d.name
FROM actor d JOIN casting a ON (a.actorid=d.id)
JOIN casting b ON (a.movieid=b.movieid)
JOIN actor c ON (b.actorid=c.id
AND c.name='Art Garfunkel')
WHERE d.id!=c.id
我的逻辑在这里完全错误吗?还是查询效率非常低(我在想)。有没有办法修复它以运行并获得正确答案?还是我应该按照正确查询的方式更合乎逻辑地思考?
有很多问题,但我想就为什么该查询不起作用以及下一步是什么提供反馈。