2012-02-25 23 views
2

我有以下声明:在ORACLE查看两个不同的值10G

SELECT movieID, actorID, title, lastName, firstName, gender 
    FROM Actor, Movie 
WHERE lastName ='Hoffman' 
    AND lastName ='Voight'; 

正试图通过有姓氏以获得这两个演员的信息,但甲骨文表示没有记录存在,但是当我寻找他们个人有是他们两个的结果。我的意思是,如果我这样做:

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

结果同时出现,但我需要一种方式,我可以搜索这两个这些人从一个查询。

+1

您的查询使用的是ANSI-89连接语法,但没有标准链接表,因此您将获得笛卡尔产品。我推荐使用ANSI-92连接语法 – 2012-02-25 23:32:27

回答

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来,标题,姓氏,名字,性别FROM演员,电影WHERE的lastName = '霍夫曼' OR的lastName = '威' 和title ='午夜牛仔';这是正确的语法吗?

提供的查询在语法上是正确的,但是对于您期望的结果而言不是正确的语法。您需要使用括号/括号,如下所示:

WHERE (lastName ='Hoffman' OR lastName ='Voight') 
    AND title ='Midnight Cowboy' 

...正确分组条件。它的工作原理与数学运算的顺序一样...

+0

如果我想从1个电影中找到这些演员电影 WHERE lastName ='Hoffman' OR lastName ='Voight' And title ='Midnight Cowboy';选择movieID,actorID,title,lastName,firstName,gender FROM Actor, 这是正确的sytax – user1137472 2012-02-25 23:25:56

+0

@ user1137472:请参阅更新 - 如果您使用'IN'子句,括号不是必需的。 – 2012-02-25 23:30:22

+0

谢谢你会尝试你的答案 – user1137472 2012-02-25 23:30:58

3

你需要OR,不AND

SELECT movieID, actorID, title, lastName, firstName, gender FROM Actor, Movie 
WHERE lastName ='Hoffman' 
OR lastName ='Voight'; 
+0

谢谢你会试试这个让你知道:) – user1137472 2012-02-25 23:19:46

+0

如果我想要做三个字段,我会添加另一个“或” – user1137472 2012-02-25 23:21:43

相关问题