在SQL中应用多个条件?

在SQL中应用多个条件?,sql,project,sqlfire,Sql,Project,Sqlfire,我有一个作业,我有麻烦,因为这是我的研究,如果你不给我直接的答案,而是给我线索(我不想作弊),我将不胜感激 我有三张桌子:电影、明星和演员。我想检索某个演员的电影(在本例中是Cameron Diaz),但我只想展示她的最新电影。所以基本上有两个条件,一个是名字条件,一个是年份释放条件 我很快就要完成了,但我被困在了一个重要的部分。如果我单独应用这些条件,它们会起作用,但我需要将它们全部包含在一个声明中。这就是我目前所拥有的 SELECT M.Title, M.Yearreleased FROM

我有一个作业,我有麻烦,因为这是我的研究,如果你不给我直接的答案,而是给我线索(我不想作弊),我将不胜感激

我有三张桌子:电影、明星和演员。我想检索某个演员的电影(在本例中是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发布的最新电影。

所以我将在这里解释,以下面的示例为例,第一次加入自然就像下面一样

Table AB
A.Yearreleased | A.col2 | B.col 1     | B.Familyname 
A.data1        | A.data2| B.data1     | B.data2
样本数据

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和B.data2,但是在你的表中,没有这样的记录,所以没有结果返回

第二次使用条件执行连接时(仍然不够合适,仍然可以改进>>),您的表如下所示

Table AB
A.Yearreleased | A.col2 | B.col 1     | B.Familyname 
A.data1        | A.data2| B.data1     | B.data2
通过第二次改进的查询,您可以获得您的数据=)


希望我的解释能帮助你理解你的错误,Cheel

你需要使用分组查询,它为姓氏选择一个日期的最大值。这不需要是嵌套查询。错误消息是什么,尽管有很多方法可以实现,但为了从错误中学习,您需要分享错误消息,并让其他人解释u=)您可以在条件之间放置and子句,例如:WHERE column1='x'和column2>100hi,所以这里没有错误信息,只有空数据,是吗?请提供样本数据,谢谢你哦,好的,我明白了。所以,我应该尝试改进我的查询,还是您认为它工作得很好。我不确定老师是否会因为我的代码效率低下而给我打分。谢谢你的快速回复,如果这是学校的项目,我相信你的讲师不会检查你的代码,只要没有性能问题,哈哈,但是为了你的未来,这很好,你可以改进你的查询=)p.s:如果你觉得我帮了你=)