如果condition为null,则使用默认值添加行

时间:2018-06-12 13:00:55

标签: mysql mariadb

如果某些字段为空,我需要添加带有默认值的行。

想象一下以下SELECT子句:

SELECT date, id, name, COALESCE(value1, -1), COALESCE(value2, -1), 
COALESCE(value3, -1) 
FROM (SELECT DATE("startDate" + INTERVAL(seq_ref.seq - 1) MONTH) AS month_ref 
FROM (SELECT seq FROM seq_1_to_36) seq_ref, table) table
WHERE...

以下数据集:

date        id   name       value1 value2 value3
2016-01-01  1    TEST LEFT  12     14     22
2016-01-01  1    TEST RIGHT 32     11     74
2016-02-01  1    null       -1     -1     -1
2016-03-01  1    TEST LEFT  09     66     33
2016-03-01  1    TEST RIGHT 13     41     20

好的,所以基本上它会返回日期范围内的一些数据。但是如果有几个月没有数据,则返回值为-1。 我需要知道是否有一种方法可以添加两行,其中包含id和name的默认值,如果没有数据的话。

例如:在2016-02-01上我应该能够为TEST LEFT显示一行,其中-1表示值,TEST RIGHT表示-1表示值。

编辑:结果应该是

date        id   name       value1 value2 value3
2016-01-01  1    TEST LEFT  12     14     22
2016-01-01  1    TEST RIGHT 32     11     74
2016-02-01  1    TEST LEFT  -1     -1     -1
2016-02-01  1    TEST RIGHT -1     -1     -1
2016-03-01  1    TEST LEFT  09     66     33
2016-03-01  1    TEST RIGHT 13     41     20

这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用IFNULL()函数。 它的工作方式如下:IFNULL(表达式,值) 在哪里检查表达式是否为null,如果是,则将其替换为value参数 你可能会做类似的事情:

    SELECT date, id, name, IFNULL(value1, -1), IFNULL(value2, -1), 
IFNULL(value3, -1) 
FROM (SELECT DATE("startDate" + INTERVAL(seq_ref.seq - 1) MONTH) AS month_ref 
FROM (SELECT seq FROM seq_1_to_36) seq_ref, table) table
WHERE...

希望这有帮助