如何从表中返回没有行时返回默认值

时间:2017-10-04 16:47:46

标签: sql null hsqldb default-value

当表ERRORMESSAGE不包含满足“WHERE”条件的行时,IFNULL失败并且我得到null,而不是IFNULL子句中提供的默认值。

select IFNULL(errorCode , 'NOERRORCODE') as "errorCode", 
    IFNULL(errorText , 'NOERROR') as "errorText" from 
    (select errorcode, 
        IFNULL((select errorText from STATIC_ERRORCODES a 
        where a.errorcode = b.errorcode), '') as errorText 
     from ERRORMESSAGE b  where b.route_id = 'IPN4' 
     order by b.row_index)

如果ERRORMESSAGE中没有包含route_id ='IPN4'的行,则输出应为:

errorCode = NOERRORCODE
errorText = NOERROR

但我得到null / empty值。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTSUNION ALL

SELECT errorCode, errorText
FROM ERRORMESSAGE WHERE <condition>
UNION ALL
SELECT 'NOERRORCODE', 'NOERROR'
FROM ERRORMESSAGE
WHERE NOT EXISTS (SELECT * FROM ERRORMESSAGE WHERE <condition>)

您需要将<condition>替换为实际条件。因此,当存在行时,SELECT之后的UNION ALL将被执行,这将显示静态行。

请注意:我从未使用过HSQLDB,因此我不确定如何显示静态行,但我用explained here