0

我有一个任务我遇到了麻烦,因为这是为了我的学习,如果你没有直接给我答案,而是给我线索(我不想作弊),我将不胜感激。

我有三个表:Movies、Stars 和 ActsIn。我想检索某个演员(在本例中为 Cameron Diaz)的电影,但我只想显示她最新的电影。所以基本上有两个条件,一个名字条件,一个年份发布条件。

我非常接近完成它,但我被困在一个重要的部分。如果我分别应用这些条件,它们会起作用,但我需要将所有这些都放在一个语句中。这就是我到目前为止所拥有的。

SELECT M.Title, M.Yearreleased
FROM Movies M NATURAL JOIN Stars S NATURAL JOIN ActsIn A
WHERE Yearreleased = (SELECT MAX(Yearreleased) FROM Movies)

这将显示最近一年发行的电影。如果我将此语句的 WHERE 条件交换为:

WHERE S.Familyname = 'Diaz'

我会得到卡梅隆迪亚兹演过的所有电影。

我尝试了以下我认为可行的代码组合:

SELECT M.Title, M.Yearreleased
FROM Movies M NATURAL JOIN Stars S NATURAL JOIN ActsIn A
WHERE Yearreleased = (SELECT MAX(Yearreleased) FROM Movies) AND S.Familyname = 'Diaz'

我从这个查询中得到的结果实际上是一个空表。

我想我需要的只是让你们给我一些线索,让我知道如何将这两个条件加入到一个语句中。谢谢你!如果您需要样本数据或小提琴,请告诉我

更新

我想我可能已经解决了它,虽然我完全是偶然做到的,也许你可以向我解释它为什么有效?查询是:

SELECT M.Title, M.Yearreleased
FROM   Movies M 
       NATURAL JOIN Stars S 
       NATURAL JOIN ActsIn A 
WHERE  Yearreleased = (SELECT MAX(Yearreleased) 
                       FROM   Movies M 
                              NATURAL JOIN Stars S 
                              NATURAL JOIN ActsIn A 
                       WHERE  S.Familyname = 'Diaz')

AND S.Familyname = 'Diaz'

这将输出 Cameron Diaz 发布的最新电影。

4

1 回答 1

1

所以我会在这里解释,以下面的例子为例,你的第一次自然加入如下所示

样本数据

Table A
A.Yearreleased | A.col2
A.data1        | A.data2

Table B
B.col 1     | B.Familyname 
B.data1     | B.data2

加入后

Table AB
A.Yearreleased | A.col2 | B.col 1     | B.Familyname 
A.data1        | A.data2| NULL        | NULL
NULL           | NULL   | B.data1     | B.data2

所以在这里你试图在你的 where 条件中搜索 A.data1 AND B.data2 ,但是在你的表中,没有这样的记录,所以没有结果返回

第二次你执行一个有条件的连接(仍然不够合适,它仍然可以改进><),你的表如下所示

Table AB
A.Yearreleased | A.col2 | B.col 1     | B.Familyname 
A.data1        | A.data2| B.data1     | B.data2

使用第二个改进的查询,您可以获取您的数据 =)

希望我的解释能够帮助你理解你的错误是什么,加油

于 2013-08-21T05:55:53.753 回答