Мы разрабатываем веб-приложение, которое использует EJB для подключения к базе данных.
В нашей модели БД у нас есть таблица мобильных устройств, еще одна с функциями и последняя, которая отображает значенияиз функций с моделями телефонов.Функции моделей (id_model, ...) (id_feature, ...) model_features (id_model, id_feature, value)
Мы хотим выполнить запрос, в котором модели упорядочены по количеству совпадающих объектов.Это значит, что мы передаем список соответствующих функций (т. Е. От 1 до 9) и хотим, чтобы все устройства содержали «да» в качестве значения хотя бы одной из этих функций, и упорядочиваем их, как было сказано ранее.
Мы создали SQL-запрос, который выполняет эту работу, и он работает:
SELECT CONCAT(subquery.numberf*100/9,"%") AS "Features", subquery.idModel AS "ID model"
FROM (select count(*) AS numberf, id_model AS idModel
FROM model_features
WHERE value LIKE '%Yes%' AND id_feature IN(1,2,3,4,5,6,7,8,9)
GROUP BY id_model) subquery
WHERE subquery.numberf > 0
ORDER BY subquery.numberf DESC
Поскольку мы используем JPA и, следовательно, нам нужно строить JPQL-запросы, невозможно включить подзапросыв предложении FROM, и мы задаемся вопросом, можем ли мы «передать» подзапрос к предложению WHERE, возможно ли это и не повлияет ли это на производительность.Как мы можем сделать?