应用多个条件SQL?

时间:2013-08-21 03:48:52

标签: sql project sqlfire

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

我有三张桌子:电影,明星和使徒行传。我想检索电影由某个演员(在这种情况下,卡梅隆迪亚兹),但我只想显示她的最新电影。所以基本上有两个条件,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发布的最新电影。

1 个答案:

答案 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

第二次改进查询,你能得到你的数据=)

希望我的解释能够帮助你理解你的错误,欢呼