2

我不完全理解子查询如何被外部查询访问,所以我需要一些帮助来解决这个问题。这是四个模式。

Movie(title, year, director, budget, earnings)
Actor(stagename, realname, birthyear)
ActedIn(stagename, title, year, pay)
CanWorkWith(stagename, director)

找出在电影中表演获得最高报酬的演员的名字。据我所知,它要求为每部电影找到片酬最高的演员……但仔细想想,括号可能表明谁的片酬最高,也许一对夫妇的片酬相同。无论如何..

我有的

SELECT A.realname
FROM ActedIn A
WHERE A.stagename IN ( SELECT A1.title, A1.year, MAX(pay)
                       FROM ActedIn A1
                       GROUP BY title, year )

我知道 WHERE A.stagename IN 是完全错误的,我只是不知道如何将它链接回来。

4

2 回答 2

2

如果我很好理解,这应该足够了:

SELECT A.realname
FROM ActedIn A
WHERE pay = (SELECT MAX(pay) FROM ActedIn B WHERE B.stagename = A.stageman)
于 2012-06-11T23:12:02.383 回答
1

子查询的概念很简单。这只是一个观点问题。当您编写子查询时,它是处理的第一段。由于它在外部查询之前被完全处理,子查询的输出应该对外部查询有意义。在您上面提供的示例中,

SELECT A.realname FROM ActedIn A WHERE A.stagename IN 
( SELECT A1.stagename FROM CanWorkWith A1 ) 

当此查询运行时,CanWorkWIth 中的 stagename 将首先被处理并给出 stagename 作为输出。期望 A.stagename 的外部查询接收此值,然后执行外部查询。

编写子查询的方式没有限制。

我希望你明白这一点。既然您了解了子查询的工作原理,我鼓励您自己解决问题并在此处使用您的新 sql 提问。祝你好运。

于 2012-06-11T23:06:21.147 回答