我有这种简单的查询,它返回给定 id 的非空整数字段:
SELECT field1 FROM table WHERE id = 123 LIMIT 1;
问题是如果找不到 id,结果集就是空的。我需要查询始终返回一个值,即使没有结果。
我有这个东西工作,但我不喜欢它,因为它运行两次相同的子查询:
SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);
如果该行存在,则返回 field1,否则返回 0。有什么方法可以改进吗?
Thanks!
编辑以下一些评论和答案: 是的,它必须在单个查询语句我不能使用计数技巧,因为我只需要返回 1 个值(仅供参考,我使用 Java/Spring 方法 SimpleJdbcTemplate.queryForLong() 运行查询)。
MySQL 有一个函数,如果结果为 null,则返回一个值。您可以在整个查询中使用它:
SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,'not found');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)