一尘不染

即使没有结果也返回一个值

mysql

我有这种简单的查询,它返回给定id的非空整数字段:

SELECT field1 FROM table WHERE id = 123 LIMIT 1;

问题是,如果找不到ID,则结果集为空。我需要查询始终返回一个值,即使没有结果也是如此。

我有这个东西工作,但我不喜欢它,因为它运行相同子查询的2倍:

SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);

如果该行存在,则返回field1,否则返回0。有什么改进的方法吗?

谢谢!

编辑以下一些评论和答案 :是的,它必须在 单个查询语句中, 并且我不能使用count技巧,因为 我只需要返回1值
(仅供参考,我使用Java / Spring方法SimpleJdbcTemplate.queryForLong()运行查询)。


阅读 184

收藏
2020-05-17

共1个答案

一尘不染

如果结果为null,MySQL具有返回值的功能。您可以在整个查询中使用它:

SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,'not found');
2020-05-17