Фильтрация по вычисленным столбцам в спящем режиме?(HAVING) - PullRequest
1 голос
/ 27 ноября 2010

Скажем, у меня есть таблица с двумя столбцами, X и Y. Я хотел бы выполнить следующий запрос через Hibernate:

SELECT X*X + Y*Y AS Distance, POINTS.* from POINTS 
WHERE X > 0 
AND Y > 0
HAVING Distance < 50

Как мне добиться этого через спящий режим? Можете ли вы предоставить пример кода?

Редактировать - Этот вопрос кажется тесно связанным. Единственная причина, по которой я не закрываю этот экземпляр как дубликат, заключается в том, что он предоставляет гораздо более простой вариант использования (без GROUP BY).

1 Ответ

0 голосов
/ 27 ноября 2010

В большинстве диалектов SQL нельзя использовать «отображаемую метку» или имя в «AS name» для ссылки на выражение внутри тела запроса - к большому огорчению людей.Однако вы можете использовать выражение в предложении WHERE.

SELECT X*X + Y*Y AS DistanceSquared, POINTS.* from POINTS 
 WHERE X > 0 
   AND Y > 0
   AND (X * X + Y * Y) < 50;

Предложение HAVING связано с агрегатами и сравнениями для агрегатов:

SELECT name, COUNT(*)
  FROM SomeWhere
 GROUP BY Name
HAVING COUNT(*) > 1;

Условия в предложении HAVING должны (должен) привлекать хотя бы один «прямой» агрегат;другой термин в условии может быть константой (как показано) или другим прямым агрегатом или подзапросом, возможно, включающим «косвенные» агрегаты.(AFAIK, я придумал терминологию «прямой / косвенный» для этого ответа - вы, вероятно, не сможете найти выражение с пользой.)

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