Доброго времени суток!
Подскажите, пожалуйста, есть ли возможность сделать выборку в следующей задачи без подзапросов?
Имеется: таблица с тегами и их значениями для записи:
item_id | tag_key | tag_value
------------------------------------------------------------
1 | Цвет | Красный
1 | Размер | 2
1 | параметр...N | Значение...N
1 | Скорость | 500
2 | Цвет | Зеленый
2 | Размер | 3
2 | Скорость | 400
Для каждого item_id прописывается связка tag_key : tag_value. Записей и разных тегов может быть сколько угодно.
Нужно выбрать сгруппированные данные по item_id, но по условию в tag_key и/или tag_value.
К примеру, есть условие: Цвет = Красный и Скорость = 500. По этому условию нужно выбрать все item_id и все соответствующие tag_key : tag_value. Можно было бы решить задачу подзапросом:
SELECT * FROM tags WHERE item_id IN (SELECT tags FROM item_id WHERE tag_key = 'Цвет' AND tag_value = 'Красный')
Но проблема в том, что условий может быть много, в том числе и отрицательных: Цвет = Красный и Скорость != 500.
Может быть есть какие-то идеи для написания одного запроса?