Эффективный запрос на существование в HQL - PullRequest
2 голосов
/ 21 марта 2011

У меня есть класс Employee с тремя членами класса: id, isVisible, sectionId .

Я хочу запросить в HQL:

  1. Если в определенном разделе есть работники вообще
  2. Если это так - все сотрудники в этом разделе скрыты.

Сейчас я делаю что-то вроде:

SELECT count(e.id), count(nullif(e.isVisible,0)) 
        from Employee e where sectionId = :sectionId

Но подсчет не так эффективен, потому что требует полного сканирования таблицы , а подсчитываемое число мне не нужно.

Вместо этого я могу сделать два запроса.

Запросите раздел для сотрудников, выполнив простой выбор и ограничив количество результатов одним результатом:

SELECT e.id from Employee e where sectionId = :sectionId

И если возвращается результат, запросите первого сотрудника в видимом разделе:

SELECT e.id from Employee e where visible = 1 and sectionId = :sectionId

Мой вопрос: могу ли я выполнить обе проверки в одном запросе?

1 Ответ

0 голосов
/ 25 января 2013

Поскольку вас интересует получение только одной строки из каждого запроса, вы можете полностью объединить их, чтобы получить одну строку с двумя столбцами.Вам нужно будет псевдоним сотрудника E1 и E2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...