【发布时间】:2011-03-15 13:21:43
【问题描述】:
我有一个这样的查询:
SELECT
jobs.*,
(
CASE
WHEN lead_informations.state IS NOT NULL THEN lead_informations.state
ELSE 'NEW'
END
) AS lead_state
FROM
jobs
LEFT JOIN lead_informations ON
lead_informations.job_id = jobs.id
AND
lead_informations.mechanic_id = 3
WHERE
lead_state = 'NEW'
这给出了以下错误:
PGError: ERROR: column "lead_state" does not exist
LINE 1: ...s.id AND lead_informations.mechanic_id = 3 WHERE (lead_state...
在 MySql 中这是有效的,但在 Postgresql 中显然不是。据我所知,原因是查询的SELECT 部分比WHERE 部分计算得晚。有解决此问题的通用解决方法吗?
【问题讨论】:
-
这是一个很好的问题,但却是一个奇怪的示例查询。您永远不想为该列选择非 NULL 值,因此整个 CASE 语句是完全没有必要的。
-
@phils 你是对的。查询是动态生成的,因此
where子句可能包含其他内容,但select部分将保持不变。
标签: sql postgresql column-alias