Можете ли вы решить этот простой запрос SQL?

Предположим, это веб-сайт, который продает фотоаппараты. Вот мои сущности (таблицы):

Camera: A simple camera
Feature: A feature like: 6mp, max resolution 1024x768, 

Дело в том, что между камерами и функцией у меня есть отношение ко многим, поэтому у меня есть дополнительная таблица:

camera -> cameras_features -> feature

Итак, запрос прост:

Как получить все камеры, которые имеют функцию 1,2 и 3?

Это похоже на создание индекса растрового изображения.

Данные, которые вы можете использовать для проверки правильности решения

C1 has features 1,2,3
C2 has features 1,2,4
C3 has features 1,2

Вот запросы и ожидаемый результат:

Показать все камеры, которые имеют функции 1,2 и 3: С1Показать все камеры, которые имеют функции 1,2 и 4: С2Показать все камеры, которые имеют функцию 1 и 2: С1, С2 а такжеC3

Вот что я сделал (это работает, но действительно ужасно, я не хочу его использовать):

SELECT * FROM camera c

WHERE c.id IN (    
    (SELECT c.id FROM camera c JOIN cameras_features f ON (c.id=f.camera_id)
    WHERE f.feature_id=1)
        q1 JOIN -- simple intersect
    (SELECT c.id FROM camera c JOIN cameras_features f ON (c.id=f.camera_id)
    WHERE f.feature_id=2)
        q2 JOIN ON (q1.id=q2.id)
)

Ответы на вопрос(3)

Ваш ответ на вопрос