2012-02-25 15 views
2

私は次の文があります。表示する2つの異なる値

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

結果に表示されますが、私は両方を検索することができる方法が必要ですこれらの人は1つのクエリからです。

+1

クエリはANSI-89結合構文を使用していますが、デカルト積を得るためにテーブルをリンクする基準はありません。私はANSI-92 join構文を使用することをお勧めします –

答えて

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句を使用することができます:論理的には、INORを使用するのと同じです

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は最適化がよくなります。ただし、OracleはIN句の数を制限します.1000を超える使用でORA-01795エラーが発生します。私はSELECT MOVIEID、アクターID、タイトル、lastNameの、firstNameの、俳優FROM性別、映画lastNameの= 'ホフマン' OR lastNameの= 'ボイト' とある1本の映画の俳優にこれらを検索したい場合はどのような

title = '真夜中のカウボーイ';これは正しい構文ですか?

提供されるクエリは構文的には正しいですが、期待する結果のための適切な構文ではありません。

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

...を適切にグループ化するには、次のようにかっこ/かっこを使用する必要があります。これは数学の演算の順序のように機能します...

+0

を追加すると3つのフィールドをしたい場合、私は1つの映画からこれらの俳優はmovieID、actorID、title、lastName、firstName、genderから俳優、映画 where lastName = 'ホフマン' OR lastName = 'Voight' タイトル= 'Midnight Cowboy'; これは正しいsytaxですか? – user1137472

+0

@ user1137472:updateを参照してください。 - IN句を使用する場合、括弧は不要です。 –

+0

お返事ありがとうございます – user1137472

3

あなたはOR、ないAND必要があります。

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

ありがとうございますこれを試してみてください:) – user1137472

+0

もし私が別の "または" – user1137472

関連する問題