В MySQL, как я должен изменить свой синтаксис, чтобы добавить предложение WHERE - PullRequest
1 голос
/ 12 февраля 2012

Пример:

SELECT s.title, t.description,
u1.value * s.cache_value as Cache,
u2.value * s.drive_value as Drive,
u3.value * s.error_value as Error,
u3.value * s.error_value + u3.value * s.error_value as ErrorHigh,
u3.value * s.error_value - u3.value * s.error_value as ErrorLow,
m.area
FROM storage s
JOIN status t on t.id = s.status_id
JOIN manufac m on m.id = s.area
JOIN unit u1 on s.cache_unit_id = u1.id
JOIN unit u2 on s.drive_unit_id = u2.id
JOIN unit u3 on s.error_unit_id = u3.id

Желаемая цель:

SELECT s.title, t.description,
u1.value * s.cache_value as Cache,
u2.value * s.drive_value as Drive,
u3.value * s.error_value as Error,
u3.value * s.error_value + u3.value * s.error_value as ErrorHigh,
u3.value * s.error_value - u3.value * s.error_value as ErrorLow,
m.area
FROM storage s
JOIN status t on t.id = s.status_id
JOIN manufac m on m.id = s.area
JOIN unit u1 on s.cache_unit_id = u1.id
JOIN unit u2 on s.drive_unit_id = u2.id
JOIN unit u3 on s.error_unit_id = u3.id
WHERE 123 BETWEEN ErrorHigh AND ErrorLow;

MySQL возвращает синтаксис Ошибка неизвестный столбец ErrorHigh

Примечание:ErrorHigh и 'ErrorLow` - новые столбцы, которые я создаю для отображения вычисленных значений

1 Ответ

4 голосов
/ 12 февраля 2012

Ошибка 1054 вызвана тем, что SQL не поддерживает ссылки на псевдонимы столбцов в предложении WHERE - самая ранняя поддержка MySQL - GROUP BY. Но большинство других баз данных поддерживают только псевдонимы столбцов в предложении ORDER BY.

Если вы хотите продолжать использовать псевдоним столбца, операцию, которую он представляет, необходимо выполнить в подвыборе, производном табличном / встроенном представлении. В противном случае вы можете заменить псевдоним столбца на операцию, которую он представляет, например:

WHERE 123 BETWEEN u3.value * s.error_value + u3.value * s.error_value 
              AND u3.value * s.error_value - u3.value * s.error_value
...