我需要一个不起作用的查询,如下所示:

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是引擎要查看的查询的最后一部分(或几乎最后一部分)。
注意:如果在使用的表上发生名称冲突,则需要限定列名。

10-04 21:03