MySQL - 帮助IF..查询中的 ELSE 用法



我需要在MySQL查询中添加一个if/elsestament,但无法让它工作。

下面是一个包含我想要完成的伪代码的示例。

SELECT *
FROM calendar
WHERE calendar.alert = 1
IF calendar.repeat = 0 THEN HAVING calendar.UTC_1 > UNIX_TIMESTAMP();
ELSE "get all records regardless of calendar.repeat value";
END IF;

有什么建议可以做到这一点吗?否则,我找不到此MySQL的正确语法。

感谢您的帮助!

SELECT *
FROM calendar
WHERE calendar.alert = 1 
AND CASE 
WHEN `repeat` =0 THEN UTC_1 > UNIX_TIMESTAMP()
ELSE 1=1 END;

只能在存储过程/触发器的主体中使用IF-ELSE。您可以在SELECT中使用IF(condition, value_if_condition_is_true, value_if_condition_is_false),但我更喜欢CASE(您可以轻松地将上面的查询重写为

 .... AND IF(`repeat` = 0, UTC_1>UNIX_TIMESTAMP(),1=1)

不确定我在这里得到了语法,但我喜欢这样的想法。 在我看来,将来查看并查看以下示例中您正在抓取的两个组要容易得多。 我没有接受过 MySQL 中案例与联合效率的教育,但在我看来,这种情况的效率也会降低。 也许有人可以肯定地回答这个问题?

SELECT *
FROM calendar
WHERE 
    calendar.alert = 1
    AND calendar.repeat = 0
    AND calendar.UTC_1 > UNIX_TIMTESTAMP();
UNION
SELECT *
FROM calendar
WHERE
    calendar.alert = 1
    AND calendar.repeat != 0

最新更新