如果该行不存在,我如何从 pgsql 中的查询返回“0”?

Posted

技术标签:

【中文标题】如果该行不存在,我如何从 pgsql 中的查询返回“0”?【英文标题】:How can i return '0' from query in pgsql, if the row doesn't exist? 【发布时间】:2013-08-19 08:20:29 【问题描述】:

如果行不存在,我如何从 pgsql 中的查询返回“0”? 喜欢

SELECT IF EXISTS(field) THEN field ELSE 0 FROM table

【问题讨论】:

【参考方案1】:

我不完全明白你想要得到什么结果,但是如果你想从表中某行的字段中获取值,如果没有行则为 0,尝试:

select coalesce((select field from table limit 1), 0)

如果您有一些可能返回 1 行或什么都不返回的表的过滤条件,请尝试以下查询:

select coalesce((select field from table where <your condition>), 0)

【讨论】:

实际上,我的第二个变体与 Magnus Hagander 的变体有点不同。在我的解决方案中,你会从表格中获得价值,而在他的解决方案中,你会得到 1 或 0,不知道你想得到哪个。 我当然会得到字段值而不是'0')我没有看到它 那么答案对你有用吗?【参考方案2】:
SELECT CASE WHEN EXISTS (SELECT 1 FROM table WHERE xxx) THEN 1 ELSE 0 END

但你的问题谈到存在于一个字段而不是一行。如果您只是与 NULL 进行比较,并考虑到“如果它存在”,那就是:

SELECT CASE WHEN field IS NULL THEN 0 ELSE 1 END FROM table

(当然,如果你真的想要 '0' 字符串,只需在返回值周围加上单引号。

【讨论】:

以上是关于如果该行不存在,我如何从 pgsql 中的查询返回“0”?的主要内容,如果未能解决你的问题,请参考以下文章

根据 Oracle 的 SQL 中的优先级返回每个键的行

休眠删除查询

PHP如何读取MYSQL数据库的字段内容然后返回该行所有内容?

使用 sqitch 中的 mysql 查询验证表不存在

我无法使用 php mysql 查询中的时间函数找到该行是不是已存在于 mysql db 中?

在 PL/pgSQL 函数中使用变量