我有这种简单的查询,它返回给定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.是否可以改进?
谢谢!
编辑以下一些注释和答案:是的,它必须在单个查询语句中,我不能使用计数技巧,因为我只需要返回1个值(仅供参考我使用Java/Spring方法运行查询SimpleJdbcTemplate.queryForLong() ).
K.A*_*.F. 95
MySQL有一个函数,如果结果为null,则返回一个值.您可以在整个查询中使用它:
SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,'not found');
Mar*_*ood 20
当你正在寻找1条记录(LIMIT 1)时,这将有效.
(SELECT field1 FROM table WHERE id = 123) 
UNION 
(SELECT 'default_value_if_no_record')
LIMIT 1;
可以是显示默认值或指示未找到结果的方便方法.我用它来报道.
另请参阅http://blogs.uoregon.edu/developments/2011/03/31/add-a-header-row-to-mysql-query-results/,了解如何使用此方法在报告中创建标头.
And*_*and 14
你可以包括count(id).那将永远回归.
select count(field1), field1 from table where id = 123 limit 1;
http://sqlfiddle.com/#!2/64c76/4