Выбрать те объекты для которых нет определенных фич

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]

Есть ли решение проще и желательно без подзапроса ?
 

chira

Новичок
Код:
SELECT object_id
FROM Object_Features
WHERE feature_id IN (1,2,3)
GROUP BY object_id
HAVING count(DISTINCT  feature_id ) = 2 AND AVG(feature_id=2)=0
 

asm

Пофигист
[SQL]
SELECT object_id
FROM Object_Features
GROUP BY object_id
HAVING NOT FIND_IN_SET( 2, GROUP_CONCAT( `feature_id` SEPARATOR ',' ) )
[/SQL]
например так :)
 

asm

Пофигист
chira

Выбрать те объекты для которых нет определенных фич
или я недопонял? :)
 

Sir_J

Guest
Всем спасибо за помощь.
Отдельно to chira: Респект тебе и увага камрад ! :)
 
Сверху