在ORACLE 10G中查看两个不同的值

时间:2012-02-25 23:15:22

标签: sql oracle oracle10g sqlplus

我有以下声明:

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';

两者的结果都出现但我需要一种方法,我可以从一个查询中搜索这两个人。

2 个答案:

答案 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相当于使用ORIN是简写,因此您无需编写每个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'

...正确分组标准。它的工作方式类似于数学运算......