MySql - 条件选择 if 语句结果

时间:2021-05-25 08:40:48

标签: mysql sql

我有以下例子

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 语句查询两次?

谢谢你。

1 个答案:

答案 0 :(得分:1)

您不能在 inter 子句中使用 WHERE,因为在那里无法理解列别名。您可以使用 CTE 或子查询。

然而,MySQL 扩展了 HAVING 对非聚合查询的使用。所以你可以添加一个 HAVING 子句:

HAVING inter >= CURDATE() -  INTERVAL DAYOFWEEK(CURDATE())+6 DAY AND
       inter > CURDATE() - INTERVAL DAYOFWEEK(CURDATE())-1 DAY;

注意:表达式的逻辑看起来不正确——但这是您问题中的表达式。第一部分限制性更强,因此第二部分是多余的。也许您打算为其中之一<