我需要一个不起作用的查询,如下所示:
SELECT *,
CASE
WHEN x_sutun1 = '1' OR x_sutun2 >= CURRENT_DATE() THEN 0
WHEN x_sutun1 < 1 AND x_sutun2 < CURRENT_DATE() THEN 1
END as mecit
FROM tablo1
LEFT JOIN tablo2 ON x_sutun0 = y_sutun0
LEFT JOIN tablo3 ON x_sutun0 = z_sutun0
WHERE x_sutun3 + mecit < 4
如何使用'mecit'作为变量(如果可能,不使用存储过程)。
最佳答案
将查询包装在外部查询中,如下所示:
select * from
(
SELECT
*
, CASE
WHEN x_sutun1 = '1' OR x_sutun2 >= CURRENT_DATE() THEN 0
WHEN x_sutun1 < 1 AND x_sutun2 < CURRENT_DATE() THEN 1
END as mecit
FROM tablo1
) m
LEFT JOIN tablo2 ON x_sutun0 = y_sutun0
LEFT JOIN tablo3 ON x_sutun0 = z_sutun0
WHERE x_sutun3 + m.mecit < 4
原因是,在解析SELECT之前,您使用的别名是不可见的,SELECT是引擎要查看的查询的最后一部分(或几乎最后一部分)。
注意:如果在使用的表上发生名称冲突,则需要限定列名。