Объединить несколько запросов MySQL UNION для оптимизации

Это было опубликовано на форуме Hibernate несколько лет назад, когда его спросили о том, почему это сработало в Hibernate 2, но не в Hibernate 3:

Предел был never поддерживаемое предложение в HQL. Вы должны использовать setMaxResults ().

blockquote>

Так что если он работал в Hibernate 2, кажется, это было по совпадению, а не по дизайну. Я думаю, что это было потому, что парсер Hibernate 2 HQL заменил бит запроса, который он распознал как HQL, и оставил все остальное как есть, чтобы вы могли прокрасться в какой-то собственный SQL. Hibernate 3, однако, имеет правильный алгоритм AST HQL, и он намного менее прощает.

Я думаю, что Query.setMaxResults() действительно является вашим единственным вариантом.

1
задан Aldee 15 January 2019 в 19:16
поделиться

1 ответ

Если вы хотите избавиться от UNION, вы можете использовать агрегированный запрос с выражением CASE для декодирования marke.

SELECT
    CASE
        WHEN a1 = 1 THEN 'Mercedes'
        WHEN a2 = 1 THEN 'BMW'
        WHEN a3 = 1 THEN 'Ford'
    END AS marke,
    COUNT(autos.id)
FROM autos
WHERE a1 = 1 OR a2 = 1 OR a3 = 1
GROUP BY a1, a2, a3
0
ответ дан GMB 15 January 2019 в 19:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: