Mysql 如果没有用于查询的数据,是否获取默认值?

Mysql 如果没有用于查询的数据,是否获取默认值?,mysql,database,stored-procedures,Mysql,Database,Stored Procedures,我有一个存储过程,在这个过程中,我查询一段时间间隔内的数据。因此,我编写了以下要在存储过程中执行的查询: SET @quer = CONCAT('INSERT INTO tmp (`time_interval`, `cnt`, `dat`, `txn_id`) (SELECT DATE_FORMAT(\'', tmpStart, '\', \'%H:%i\') as time_interval , COUNT(v.id) as cnt , date(v.timestamp) as da

我有一个存储过程,在这个过程中,我查询一段时间间隔内的数据。因此,我编写了以下要在存储过程中执行的查询:

SET @quer = CONCAT('INSERT INTO tmp (`time_interval`, `cnt`, `dat`, `txn_id`) (SELECT DATE_FORMAT(\'', tmpStart, '\', \'%H:%i\') as time_interval , COUNT(v.id) as cnt
     , date(v.timestamp) as dat, \"', _txn_id, '\" as txn_id FROM vehicle v WHERE v.timestamp BETWEEN \'', tmpStart, '\'
                        AND \'', tmpEnd, '\' ', _where_clause, ' GROUP BY time_interval)')
但问题是,我希望它为没有值的时间间隔插入0

Actual : for 01:00 - 02:00 = 12
         for 03:00 - 04:00 = 10
Expected:for 01:00 - 02:00 = 12
         for 02:00 - 03:00 = 0
         for 03:00 - 04:00 = 10
请任何人建议我如何更改查询以获得此结果


谢谢。

尝试使用合并函数,如果列为null,则合并函数将您的值作为默认值,示例如下:

SELECT id, ..., coalesce(columnWithNulls, DefaultValue) FROM ...

尝试使用IFNULL函数


选择IFNULLDATE\u FORMAT\、tmpStart、\'%H:%i\'、'0'作为时间间隔

我使用此查询得到了答案。使用默认值0合并所有

SET @quer = CONCAT('INSERT INTO tmp (`time_interval`, `cnt`, `dat`, `txn_id`) Select * FROM (SELECT DATE_FORMAT(\'', tmpStart, '\', \'%H:%i\') as time_interval , COUNT(v.id) as cnt
 , date(v.timestamp) as dat, \"', _txn_id, '\" as txn_id FROM vehicle v WHERE v.timestamp BETWEEN \'', tmpStart, '\'
                    AND \'', tmpEnd, '\' ', _where_clause, ' GROUP BY time_interval UNION ALL SELECT DATE_FORMAT(\'', tmpStart, '\', \'%H:%i\') as time_interval , 0 as cnt
 , date(\'', tmpStart, '\') as dat, \"', _txn_id, '\" as txn_id) AS A GROUP BY A.time_interval');

我这样编辑:coalesccountv.id,0作为cnt,但它仍然是一样的。我做错了吗?真奇怪。联合应该起作用,就像一个符咒。select查询返回的结果是什么?我对碳纳米管柱特别感兴趣。您还可以尝试大小写语法。选择case COUNTv.id为null[或任何无效计数将返回的值],然后选择0,否则COUNTv.id将结束为cnt…不,它不工作。我希望cnt为0,但它没有值。您可以将所有时间间隔和日期一次性插入表tmp,而不是从select查询的结果集中插入。稍后您可以使用带有IFNULLcolwithnull的“默认值”的更新查询。对于插入tmp时间间隔的eg,dat值为“01:00-02:00”、“2015-07-01”和更高版本的更新tmp设置时间间隔=选择IFNULLDATE格式\、tmpStart、\'、\'%H:%i\、'0'