【问题标题】:In MySQL how should I alter my syntax to add a 'WHERE' clause在 MySQL 中,我应该如何更改语法以添加“WHERE”子句
【发布时间】:2012-03-04 07:49:09
【问题描述】:

例子:

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` 是我创建的用于显示计算值的新列

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2018-08-20
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多