@romashkoaleksandr

Как составить запрос к mysql?

Есть таблица:
5d8676c1c09ff153634790.png

В id_item хранится номер объекта
key - это ключ свойства
val - значение свойства

Необходимо получить значение свойства с ключом 3
при условии, что
key 1 = 100
val 2 = 1000

Т.е. из примера выше мы должны получить 555 и 666

Подскажите, как написать этот запрос?
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 3
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
SELECT 
 *
FROM <tablename> t
WHERE t.key = 3 
AND EXISTS(SELECT 'x' FROM <tablename> t2 ON t2.id_item = t.id_item AND t2.key=1 AND t2.val=100)
AND EXISTS(SELECT 'x' FROM <tablename> t2 ON t2.id_item = t.id_item AND t2.key=2 AND t2.val=1000)

индексы (id_item, key, val) и (key)
Ответ написан
dimonchik2013
@dimonchik2013
жизнь прекрасна в Амстердаме, а в Воронеже gаvно
запрос можно через тройной джойн самого на себя, но, конечно, в IRL за такое лишают зарплаты
Ответ написан
@Vitsliputsli
При условии уникальности key в одной группе id_item:
select max(case when `key`=3 then `value` else null end) `value`
    from test 
    where (`key`=1 and `value`=100)
    	or (`key`=2 and `value`=1000)
        or (`key`=3)
    group by id_item
    having count(`value`)=3

очень неочевидная запись, как часто бывает с SQL, но должна быть наиболее производительной за счет одного прохода и без соединений.
индекс (id_item, key, val)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы