2

我想要一个 SELECT 语句,如果数据库没有返回任何行,它将返回指定的默认值。

我们可以使用 UNION 来获得所需的结果,例如这个问题:“如何为不返回任何行的查询设置默认行? ”,但这会给出额外的结果行。

例子:

SELECT a 
    from TBL_TEST 
UNION 
SELECT 0 
    FROM DUAL

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

4

8 回答 8

7
SELECT ifnull(a,20) FROM TBL_TEST 

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

于 2013-04-16T04:18:24.483 回答
5

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

select coalesce(a, 0)
    from TBL_TEST 
    right outer join DUAL on null is null

这里使用 COALESCE 函数是因为它比 NVL() 或 IFNULL() 更便于移植。

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

于 2013-04-16T15:39:37.420 回答
1
MySQL IFNULL is like oracle's NVL function 
MySQL IFNULL() takes two expressions and if the first expression is not NULL, it returns the first expression. Otherwise it returns the second expression.
Syntax 

IFNULL(expression1, expression2); 

SELECT IFNULL(a,<default value>) from TBL_TEST 
于 2013-04-16T04:36:40.353 回答
1

在,SQL SERVER 2008 R2:空字符串时

SELECT ISNULL(NULLIF(a,<Empty String>)<Default Value>) from TBL_TEST

e.g. SELECT ISNULL(NULLIF(a,'')0) from TBL_TEST

这工作正常...

于 2013-04-16T08:06:35.040 回答
1

在 SQL SERVER 2008 R2 中:当值为 NULL 时

SELECT ISNULL(a,<Default Value>) from TBL_TEST

e.g. SELECT ISNULL(a,0) from TBL_TEST
于 2013-04-16T05:06:27.820 回答
1

MySQL 具有该DEFAULT功能,但我不确定它的标准或广泛支持程度。

于 2013-04-16T03:43:40.160 回答
1

使用 COALESCE() 将空值列转换为其默认值,例如

从 TBL_TEST 中选择 coalesce(a,0)

于 2013-04-16T05:39:01.597 回答
1

在甲骨文中:

select nvl(a, 0)
from DUAL left join TBL_TEST on null is null
于 2013-04-16T04:41:48.260 回答