2017-10-04 224 views
0

当表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 

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

回答

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

+0

感谢的人。与一些修改,它的工作伟大的! – keanu

+0

@keanu您需要将其标记为已接受,以便对其他人有所帮助。 – Ravi