我有以下例子
SELECT
oa.country_id,
s.country_id,
(IF(
s.country_id = oa.country_id,
DATE_ADD(DATE(so.created_at), INTERVAL 2 DAY),
DATE_ADD(DATE(so.created_at), INTERVAL 5 DAY)
)
) AS inter
我想添加 where 条件如下:
WHERE inter >= CURDATE() - INTERVAL DAYOFWEEK(CURDATE())+6 DAY
AND inter > CURDATE() - INTERVAL DAYOFWEEK(CURDATE())-1 DAY;
是否可以添加“inter”结果的位置? 或者我需要在 WHERE 中重复相同的 if 语句查询两次?
谢谢你。
答案 0 :(得分:1)
您不能在 inter
子句中使用 WHERE
,因为在那里无法理解列别名。您可以使用 CTE 或子查询。
然而,MySQL 扩展了 HAVING
对非聚合查询的使用。所以你可以添加一个 HAVING
子句:
HAVING inter >= CURDATE() - INTERVAL DAYOFWEEK(CURDATE())+6 DAY AND
inter > CURDATE() - INTERVAL DAYOFWEEK(CURDATE())-1 DAY;
注意:表达式的逻辑看起来不正确——但这是您问题中的表达式。第一部分限制性更强,因此第二部分是多余的。也许您打算为其中之一<
。