Sir_J
Guest
Выбрать те объекты для которых нет определенных фич
Имеем 3 таблицы
1 Objects: object_id int
1 Features: feature_id int
2 Object_Features: object_id int, feature_id int
Пример данных:
Objects: 1, 2, 3
Features: 1, 2, 3
Object_Features: (1,1), (1,2), (1,3), (2,1), (2,3)
Объект 1 имеет 3 фичи (1,2,3), объект 2 имеет 2 фичи (1,3)
Выбираем те объекты для которых установлены фичи 1, 2, 3 одновременно
[sql] select object_id from Object_Features
where feature_id = 1 or feature_id = 2 or feature_id = 3
having count(*) = 3 [/sql]
Вопрос: Как выбрать те объекты у которых установлены фичи 1,3 и НЕ установлена фича 2 ?
Обращаю внимание что конструкция, сразу приходящая в голову
[sql] select object_id from Object_Features
where feature_id = 1 or feature_id = 2
having count(*) = 2 [/sql]
не верна, т. к. это не поиск с НЕ установленой фичей 2, а поиск где 2 ВООБЩЕ не учитывается.
Можно выкрутся подзапросом
[sql] select object_id from Object_Features,
where ( feature_id = 1 or feature_id = 2 )
and object_id not in ( select object_id from Object_Features where feature_id = 2 )
having count(*) = 2 [/sql]
Есть ли решение проще и желательно без подзапроса ?
Имеем 3 таблицы
1 Objects: object_id int
1 Features: feature_id int
2 Object_Features: object_id int, feature_id int
Пример данных:
Objects: 1, 2, 3
Features: 1, 2, 3
Object_Features: (1,1), (1,2), (1,3), (2,1), (2,3)
Объект 1 имеет 3 фичи (1,2,3), объект 2 имеет 2 фичи (1,3)
Выбираем те объекты для которых установлены фичи 1, 2, 3 одновременно
[sql] select object_id from Object_Features
where feature_id = 1 or feature_id = 2 or feature_id = 3
having count(*) = 3 [/sql]
Вопрос: Как выбрать те объекты у которых установлены фичи 1,3 и НЕ установлена фича 2 ?
Обращаю внимание что конструкция, сразу приходящая в голову
[sql] select object_id from Object_Features
where feature_id = 1 or feature_id = 2
having count(*) = 2 [/sql]
не верна, т. к. это не поиск с НЕ установленой фичей 2, а поиск где 2 ВООБЩЕ не учитывается.
Можно выкрутся подзапросом
[sql] select object_id from Object_Features,
where ( feature_id = 1 or feature_id = 2 )
and object_id not in ( select object_id from Object_Features where feature_id = 2 )
having count(*) = 2 [/sql]
Есть ли решение проще и желательно без подзапроса ?