当 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 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>
。因此,当有行存在时,UNION ALL
之后的 SELECT
将被执行,这将显示静态行。
请注意:我从未使用过 HSQLDB,所以我不确定如何显示静态行,但我用作 explained here
当 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 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>
。因此,当有行存在时,UNION ALL
之后的 SELECT
将被执行,这将显示静态行。
请注意:我从未使用过 HSQLDB,所以我不确定如何显示静态行,但我用作 explained here