Выбор значений на основе других значений SQL?

Я не знал, как назвать этот вопрос, поэтому прошу прощения, если название вводит в заблуждение.

У меня есть два столбца в таблице MovieID и Format (у меня их больше, но это те, на которых я сосредоточен.

В столбце «Формат» есть два типа значений: «DVD» и «Blu-ray». Я хочу выбрать фильмы ТОЛЬКО в формате DVD. Обратите внимание, что есть несколько фильмов в формате Blu-ray и DVD, я не хочу отображать эти значения. См. Fiddle ниже для примера моих данных. Спасибо!!!

http://sqlfiddle.com/#!2

MovieID | Format
-----------------
1000    DVD
1000    DVD
1000    Blu-ray
1001    DVD
1001    DVD
1002    DVD
1003    DVD
1003    Blu-ray
1004    DVD

Я ХОЧУ ВЫВОДИТЬ

MovieID
------------
1001    
1002     
1004     

person user1330649    schedule 20.08.2013    source источник
comment
Ссылка на SQLFiddle не работает :(   -  person Sergey Kalinichenko    schedule 20.08.2013
comment
Вы настолько изменили вопрос, что текущие ответы больше не имеют смысла. Было бы лучше написать новый вместо замены старого. Это нехорошо для людей, которые ответили на ваш первоначальный вопрос.   -  person xwoker    schedule 12.09.2013
comment
Если у вас есть новый вопрос, пожалуйста, опубликуйте его как новый. Удаление ранее принятого ответа, а затем переписывание исходного вопроса с нуля - это просто вандализм и вызывает много путаницы (я только что получил уведомление о том, что потерял репутацию из-за удаления моего принятого ответа).   -  person Niels Keurentjes    schedule 12.09.2013


Ответы (2)


Один простой способ добиться этого заключается в следующем:

SELECT DISTINCT (MovieID)
FROM Movies m
WHERE Format='DVD'
AND NOT EXISTS (
    SELECT * FROM Movies mm WHERE mm.MovieID=m.MovieID AND mm.Format='Blu-ray'
)

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

person Sergey Kalinichenko    schedule 20.08.2013

select MovieID
from Table
where Format = 'DVD'
  and MovieID not in (select MovieID from Table where Format <> 'DVD')

Не беспокойтесь, если это покажется неэффективным, если у вас есть правильные индексы, хорошая СУБД оптимизирует это в высокоэффективный код.

person Niels Keurentjes    schedule 20.08.2013