Есть таблица table (object,properti,val) object - айди объекта properti - айди свойста объекта val - айди значения свойства объекта Нужно выбрать properti, которые имеют object-ы с properti=7 и val=3 Например таблица 1 3 4 1 7 3 2 4 1 2 7 3 3 1 1
[sql]SELECT `properti` FROM `table` WHERE `object` IN (SELECT `object` FROM `table` WHERE `properti`=7 and `val`=3) GROUP BY `properti`[/sql]
Решается стандартной оптимизацией через EXISTS (SELECT 1 FROM ... Сразу так писать не стал т.к. понятно что структура дана только для примера.
И это правильно в том случае. Замените подзапрос, чтобы находил одно значение, и будет быстрее. Ну и какие проблемы? JOIN это тоже подзапрос. п.с. Предполагаю, что в вопросе была опечатка и нужны не свойства, а объекты: [sql]SELECT t1.* FROM `table` as t1 inner join table as t2 on t2.object = t1.object and t2.properti = 7 and t2.val = 3[/sql]
Если в задании опечатка и нужно выбрать не свойства, а объекты, то почему не сделать всего лишь через AND: [sql]SELECT 'object' FROM 'table' WHERE properti=7 AND val=3 GROUP BY 'object';[/sql]
Имхо нет там опечатки, просто корявая формулировка. У меня тоже нормально сформулировать не получилось, примерно так: запрос который выберет все значения `properti` соотвествующие значениям `object` у которых хотя-бы однажды встречается `properti`=7 и `val`=3.