postgres,当存在时返回列值

时间:2018-08-30 07:24:45

标签: sql postgresql

我有一个类似这样的sql查询:

CASE WHEN EXISTS
(SELECT r.name as name from downtime d, result r where d.status_id = r.id limit 1) 
THEN 'down' 
ELSE 'up' 
END

在上面的查询中,如果没有匹配项(结果为0),则返回“ up”,否则返回“ down”。 但是,如果有任何匹配项,我希望它返回“ r.name”。 因此此查询不起作用:

CASE WHEN EXISTS
(SELECT r.name as name from downtime d, result r where d.status_id = r.id limit 1) 
THEN r.name 
ELSE 'up' 
END

任何指针我该怎么做

2 个答案:

答案 0 :(得分:2)

使用coalesce()返回第一个非空值:

coalesce((SELECT r.name from downtime d, result r where d.status_id = r.id limit 1), 'up')

答案 1 :(得分:0)

要从一列中获取价值,您必须编写 select column_name from table where some condition,因此,如果您执行以下操作,它将起作用。

CASE WHEN EXISTS
(SELECT r.name as name from downtime d, result r where d.status_id = r.id limit 1) 
THEN (SELECT r.name as name from downtime d, result r where d.status_id = r.id limit 1) 
ELSE 'up' 
END