Задать вопрос

Как лучше оптимизировать вот такой запрос с IN и NOT IN?

Господа гуру SQL!
подскажите, как лучше оптимизировать вот такой некрасивый запрос:
SELECT 
  objectId 
FROM 
  objects 
WHERE objectId NOT IN 
                     (SELECT 
                        objectId 
                      FROM 
                        objects_categories 
                      WHERE 
                        objectCat NOT IN (
                                                      select 
                                                         deviceCat 
                                                       FROM 
                                                         device_categories 
                                                      WHERE 
                                                         deviceId=1
                                                   )
                    )


Таблица objects -основная, две связующие таблички objects_categories и device_categories содержат по 2 поля:
objectId, categoryId (для objects_categories)
deviceId, deviceCat (для device_categories)

тоесть суть такова, что мне нужно вывести те объекты, в которых нет категорий, отсутствующих в device_categories для девайса №1

Буду очень признателен!
  • Вопрос задан
  • 3193 просмотра
Подписаться 5 Оценить Комментировать
Ответ пользователя knekrasov К ответам на вопрос (3)
knekrasov
@knekrasov
Первое, что пришло на ум (не проверял):
select o.objectId from objects o
where not exists (
  select * from 
    object_category oc  
    join device_category dc on oc.categoryId = dc.deviceCat
    where dc.deviceId = 1 
      and o.objectId = oc.objectId
)

Ответ написан