如何为标量子查询指定非空默认值?

问题描述 投票:0回答:1

我有以下形式的查询:

SELECT 
col1,
col2,
(
SELECT my_value FROM my_second_table WHERE my_table.value = ...
) AS potentially_null_column

FROM my_first_table

SELECT my_value FROM my_second_table WHERE my_table.value = ...
未返回任何行时,则
potentially_null_column
设置为
null

这与标量子查询上的 Postgres 文档一致:https://www.postgresql.org/docs/8.3/sql-expressions.html#SQL-SYNTAX-SCALAR-SUBQUERIES

但是,如果在特定执行过程中子查询没有返回任何行,则不会出现错误;标量结果被视为空。)

问题是,如果没有返回行,我希望

potentially_null_column
成为字符串
'UNSET'
而不是
null
。不幸的是,
coalesce
在这里不起作用,因为没有返回要合并的行。如何为标量子查询指定非空默认值?

postgresql
1个回答
0
投票

正如评论中所说,

COALESCE
功能就是您正在寻找的:

SELECT *,
       COALESCE((
          SELECT potentially_null_column
          FROM my_second_table
          WHERE [...]
       ), 'UNSET')
FROM my_first_table

SQL 不允许在单个列中返回混合类型,因此如果您的数据不是

VARCHAR
/
TEXT
等类似数据,则不允许返回常量字符串而不是
NULL

例如,如果您的列是
INTEGER
/
NUMERIC
,您可以将
NULL
替换为
0
,而不是
'UNSET'

SELECT *,
       COALESCE((
          SELECT potentially_null_column
          FROM my_second_table
          WHERE [...]
       ), 0)
FROM my_first_table
© www.soinside.com 2019 - 2024. All rights reserved.