在MySQL中,我应该如何更改语法以添加“WHERE”子句

时间:2012-02-12 18:45:14

标签: mysql sql where-clause mysql-error-1054

示例:

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 个答案:

答案 0 :(得分:4)

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