我try 使用MySQL IF() function根据指定的条件执行代码块.

如果条件为TRUE,则返回"KO";如果条件为FALSE,则返回"OK".

以下说明了IF() function的语法:

SELECT
id,
IF(DATEDIFF( Date_PEC, Date_Start ) > 30, "KO", "OK") DateDiff_1,
IF(DATEDIFF( Date_PEC, Data_Analysis ) > 45, "KO", "OK") DateDiff_2,
IF(DATEDIFF( Data_Analysis, Date_communication ) > 30, "KO", "OK") DateDiff_3,
IF(DATEDIFF( Date_communication, Date_of_issue ) > 30, "KO", "OK") DateDiff_4,
IF(DATEDIFF( Data_Analysis, Date_Archiving ) > 30, "KO", "OK") DateDiff_5,
IF(DATEDIFF( Date_of_issue, Date_Payment ) > 30, "KO", "OK") DateDiff_6 
FROM `dotable` 
WHERE
 id = 161016;

+--------+------------+------------+------------+------------+------------+------------+
| id     | DateDiff_1 | DateDiff_2 | DateDiff_3 | DateDiff_4 | DateDiff_5 | DateDiff_6 |
+--------+------------+------------+------------+------------+------------+------------+
| 161016 | OK         | OK         | OK         | OK         | OK         | OK         |
+--------+------------+------------+------------+------------+------------+------------+
1 row in set (0.16 sec)

我需要:

  1. 如果所有条件都返回OK,我必须用OK值更新id号161016表中的ALS列.
  2. 如果至少有一个返回值为KO,我必须更新id号为161016的表中包含KO值的ALS列.

mysql数据库的版本是8.0.12.

有什么建议吗?

推荐答案

UPDATE dotable
SET als = CASE WHEN (DATEDIFF( Date_PEC, Date_Start ) > 30) 
                  + (DATEDIFF( Date_PEC, Data_Analysis ) > 45) 
                  + .. 
                  + (DATEDIFF( Date_of_issue, Date_Payment ) > 30)
                THEN 'KO'
                ELSE 'OK'
                END
WHERE id = 161016;

Single (DATEDIFF( Date_PEC, Date_Start ) > 30)返回0或1,具体取决于条件是否为FALSE或TRUE.

当所有6个值都为零时,总和为零,并被视为FALSE,这将导致OK赋值.

当至少有一个值不为零时,则总和大于零,并被视为TRUE,从而导致KO赋值.

如果某个日期值为空(或该值不是日期且禁用了严格模式),则将分配OK.

另外,我更喜欢为als列使用生成的列,而不是显式更新的列-在这种情况下,您只需始终 Select 实际值.

Mysql相关问答推荐

如何在循环查询中删除默认架构?

正则表达式转换为MYSQL格式

MySQL生成的整型计算可以为空吗?

MySQL多连接以获得单个结果集(使用MySQL max函数)

Python MySQL-无法从数据库中删除行

计算符合字段值只能包含一种事件类型这一事实的记录

如何在 SQL 中迭代所有名称和排名排列

SQL - 基本的内部连接查询

如何编写按天数汇总值的sql查询?

在 MySQL 中使用非空条件 LAG() 函数

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

MySQL Join 查询位置从订单

MySQL如何通过外键ID Select 多行?

我在查询中没有得到正确的结果

显示值为空的所有列名

获取Count(*)占GROUP BY中所有项目数的百分比

在 MySQL 中签名或未签名

在网页的 HTML 表中显示 MySQL 数据库表中的值

int(11) 和 int(11) UNSIGNED 有什么区别?

按 COUNT(*) 过滤?