我有一项任务,我遇到了麻烦,因为这是为了我的学习,如果你没有直接给我答案,我会很感激,但反而给了我线索(我不想作弊) 。
我有三张桌子:电影,明星和使徒行传。我想检索电影由某个演员(在这种情况下,卡梅隆迪亚兹),但我只想显示她的最新电影。所以基本上有两个条件,A名称条件和一年发布条件。
我非常接近完成它,但我被困在一个至关重要的部分。如果我单独应用这些条件它们可以工作,但我需要在一个语句中全部使用它们。这就是我到目前为止所做的。
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'
我将获得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) 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发布的最新电影。
答案 0 :(得分: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
第二次改进查询,你能得到你的数据=)
希望我的解释能够帮助你理解你的错误,欢呼