在select语句中设置默认值(不使用UNION语句)

Ron*_*yen 0 mysql sql sql-server oracle db2

我希望有一个SELECT语句,如果没有从数据库返回任何行,将返回指定的默认值.

我们可以使用UNION来获得所需的结果,例如:" 如何为不返回行的查询设置默认行? ",但这会产生额外的结果行.

例:

SELECT a 
    from TBL_TEST 
UNION 
SELECT 0 
    FROM DUAL
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法,或者标准的SQL方法可以跨多个数据库引擎移植?

fai*_*sal 6

SELECT ifnull(a,20) FROM TBL_TEST 
Run Code Online (Sandbox Code Playgroud)

如果a为null则选择20,否则选择a(在mysql中,不确定其他)

  • 当表中没有返回任何行时,这不能解决问题. (4认同)

War*_*enT 5

对于便携式解决方案,如何:

select coalesce(a, 0)
    from TBL_TEST 
    right outer join DUAL on null is null
Run Code Online (Sandbox Code Playgroud)

此处使用COALESCE功能,因为它比NVL()或IFNULL()更便携.

您将在数据库系统中创建一个使用不同名称的DUAL表,例如SQL Server或DB2.