当 table 中没有行 return 时如何 return 默认值

How to return default value when no rows return from table

当 table 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 值。我该如何解决这个问题?

您可以使用 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>。因此,当有行存在时,UNION ALL 之后的 SELECT 将被执行,这将显示静态行。

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