当表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值。我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用NOT EXISTS
和UNION 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