【发布时间】:2016-05-26 09:02:02
【问题描述】:
我需要一个模仿 if-then-else 语句形式的 SQL 查询:
if (query1 != null)
return query1
else
return query2
由于 COALESCE 不适用于结果集,我创建了一个联合查询来完成这项工作:
SELECT * FROM obs WHERE cond1 --query1
UNION
SELECT * FROM obs WHERE (NOT EXISTS(query1)) AND cond2
在 SQL 中:
( SELECT * FROM obs WHERE src = @id AND tstart <= @instant AND tend >= @instant )
UNION
( SELECT * FROM obs WHERE (NOT EXISTS (SELECT 1 FROM obs WHERE src = @id AND tstart <= @instant AND tend >= @instant )) AND src = @id AND tstart <= @instant ORDER BY tend DESC LIMIT 1);
表 obs 具有字段 ( src | tstart |ten | ... )。我想选择那些与@instant 重叠的行。如果没有找到重叠行,则应返回@instant 之前最近的行。
SQL UNION 语句有效,但非常笨拙,我正在寻找更短更清晰的语句。符合 COALESCE ( query1, query2 ) 精神的东西会很好。我的数据库是 Postgresql。
【问题讨论】:
标签: sql postgresql select coalesce isnull