单行查询失败时返回默认值
在执行SQL查询获取特定数据时,经常会遇到没有对应行的情况存在。为了避免返回空结果,您可能需要提供默认值。
考虑以下 SQL 语句,该语句检索流的下一个计划项目:
SELECT `file`
FROM `show`, `schedule`
WHERE `channel` = 1
AND `start_time` <= UNIX_TIMESTAMP()
AND `start_time` > UNIX_TIMESTAMP()-1800
AND `show`.`id` = `schedule`.`file`
ORDER BY `start_time`
DESC LIMIT 1
如果没有找到匹配的行,则该查询将返回空结果。但是,为了确保在没有计划项目的情况下在流上播放某些内容,您可以返回默认值。
实现此目的的一种方法是使用 IFNULL 或 COALESCE 函数。通过将原始查询包装在这些函数中,您可以指定在未找到行时将返回的默认值:
SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...
SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...
但是,当找不到行时,这些尝试仍然会导致空结果。为了解决这个问题,更有效的技术是使用像 MIN 这样的聚合函数和 IFNULL:
SELECT IFNULL(MIN(`file`), 'default.webm') `file`
FROM `show`, `schedule`
WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP()
AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file`
ORDER BY `start_time` DESC LIMIT 1
通过使用聚合函数 MIN,可以确保在没有选择任何记录的情况下得到 NULL 结果。然后,该 NULL 值将替换为 IFNULL 提供的默认值。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3