我有以下声明:
SELECT movieID, actorID, title, lastName, firstName, gender
FROM Actor, Movie
WHERE lastName ='Hoffman'
AND lastName ='Voight';
我试图通过姓氏从这两个演员那里获取信息,但是oracle说没有记录存在,但当我搜索他们时,他们两个都有结果。我的意思是如果我这样做:
SELECT movieID, actorID, title, lastName, firstName, gender
FROM Actor, Movie
WHERE lastName ='Hoffman';
然后在完成后运行下一个:
SELECT movieID, actorID, title, lastName, firstName, gender
FROM Actor, Movie And lastName
WHERE lastName ='Voight';
两者的结果都出现但我需要一种方法,我可以从一个查询中搜索这两个人。
答案 0 :(得分:3)
您需要OR
,而不是AND
:
SELECT movieID, actorID, title, lastName, firstName, gender FROM Actor, Movie
WHERE lastName ='Hoffman'
OR lastName ='Voight';
答案 1 :(得分:2)
问题在于,因为您使用了AND
,所以lastname
必须同时为两个值。这是不可能的。您可以切换为使用OR
:
SELECT m.movieID, a.actorID, m.title, a.lastName, a.firstName, a.gender
FROM ACTOR a,
MOVIE m
WHERE a.lastName ='Hoffman'
OR a.lastName ='Voight'
或者您可以使用IN
子句:
SELECT m.movieID, a.actorID, m.title, a.lastName, a.firstName, a.gender
FROM ACTOR a,
MOVIE m
WHERE a.lastName IN ('Hoffman', 'Voight')
逻辑上,IN
相当于使用OR
。 IN
是简写,因此您无需编写每个OR
。并且IN
倾向于更好地优化。但是,Oracle会限制IN
条款的数量 - 使用超过1,000个条款会导致ORA-01795错误。
如果我想从1个电影中找到这些演员,那就是SELECT movieID,actorID,title,lastName,firstName,gender FROM Actor,Movie WHERE lastName ='Hoffman'或lastName ='Voight'和title ='午夜牛仔';这是正确的语法吗?
提供的查询在语法上是正确的,但不是您期望的结果的正确语法。您需要使用括号/括号,如下所示:
WHERE (lastName ='Hoffman' OR lastName ='Voight')
AND title ='Midnight Cowboy'
...正确分组标准。它的工作方式类似于数学运算......