我正在构建一个 SQL 查询以生成一张已接受或延迟关闭的工单表。
SELECT
svc_guid,
svc_priority,
cast(svc_minsinqueue AS SIGNED)-(pri_svc_accept_hours * 60) AS accept_overdue,
cast(svc_minselapsed AS SIGNED)-(pri_svc_close_hours * 60) AS closure_overdue
FROM
svcrequest
LEFT JOIN
priorities
ON
pri_id=svc_priority
WHERE
accept_overdue > 0 OR
closure_overdue > 0
ORDER BY
accept_overdue DESC;
结果是:
#1054 - Unknown column 'accept_overdue' in 'where clause'
与 WHERE 1 相同的精确查询不会产生错误。 (即使使用 ORDER BY accept_overdue DESC)
最佳答案
不能在where子句中使用列名别名
where 子句在 select 子句之前计算,因此数据库引擎无法知道此列别名
要构建正确的查询,您必须复制相关的列代码
SELECT
svc_guid,
svc_priority,
cast(svc_minsinqueue AS SIGNED)-(pri_svc_accept_hours * 60) AS accept_overdue,
cast(svc_minselapsed AS SIGNED)-(pri_svc_close_hours * 60) AS closure_overdue
FROM
svcrequest
LEFT JOIN
priorities
ON
pri_id=svc_priority
WHERE
cast(svc_minsinqueue AS SIGNED)-(pri_svc_accept_hours * 60) > 0 OR
cast(svc_minselapsed AS SIGNED)-(pri_svc_close_hours * 60) > 0
ORDER BY
accept_overdue DESC;
如您所见,ORDER BY 子句将事实评估为最后一个 .. 可以使用列别名
关于mysql - 为什么 MySQL 对于明确定义的列显示 Unknown column?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57206781/