2012-02-25 25 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

相關問題