Просмотр двух разных значений в ORACLE 10G - PullRequest
2 голосов
/ 26 февраля 2012

У меня есть следующее утверждение:

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

Появляются результаты для обоих, но мне нужен способ, чтобы я мог найти обоих этих парней по одному запросу.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Вам нужно OR, а не AND:

SELECT movieID, actorID, title, lastName, firstName, gender FROM Actor, Movie
WHERE lastName ='Hoffman'
OR lastName ='Voight';
2 голосов
/ 26 февраля 2012

Проблема в том, что, поскольку вы использовали 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 - вы рискуете ошибкой ORA-01795 при использовании более 1000.

что делать, если я хочу найти это для актеров из 1 фильма, который ВЫБЕРИТЕ movieID, actorID, title, lastName, firstName, пол FROM Actor, фильм WHERE lastName = 'Hoffman' ИЛИ ​​lastName = 'Voight' And title = ' Полуночный Ковбой '; Это правильный синтаксис?

Предоставленный запрос синтаксически правильный, но не соответствует синтаксису ожидаемых результатов. Вам нужно использовать скобки / круглые скобки, например:

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

... чтобы правильно сгруппировать критерии. Это работает как порядок операций в математике ...

...