postgresql 如果表中存在编号,则返回1,否则返回0

qvsjd97n  于 2022-12-03  发布在  PostgreSQL
关注(0)|答案(3)|浏览(690)

如果某个数字已经存在于表中,则返回1,否则返回0。
我试过了,但不管用:

select
case when 100 in (select distinct id from test) then '1'
else '0'
from test

我想要类似于PostgreSQL中已经存在的exists函数的东西,但是我想要的不是truefalse,而是10

nxagd54h

nxagd54h1#

**EXISTS**会产生boolean结果。

实现所需结果的简单方法是将结果转换为integer

SELECT (EXISTS (SELECT FROM test WHERE id = 100))::int;

TRUE变成了1
FALSE变成了0
请参阅:

  • 如果找不到记录则返回值
    或者使用UNION ALL/LIMIT 1(可能会稍微快一点):
SELECT 1 FROM test WHERE id = 100
UNION  ALL
SELECT 0
LIMIT  1;

如果找到行,则返回1,Postgres将因LIMIT 1而停止执行。否则,返回0

免责声明适用于UNION ALL解决方案:这依赖于未记录的行为,Postgres将按顺序执行UNION ALL项。在Postgres 11之前一直是这种情况,在Postgres中添加了Parallel Append。实际上现在仍然是这种情况(当前Postgres 15),因为检索单个行永远不会触发Parallel Append计划。但它仍然是未记录的行为,因此您可能不想依赖它。请参阅:

abithluo

abithluo2#

如果要测试的字段是主键(或其他一些唯一约束),则只需返回计数(始终为0或1):

SELECT count(*) FROM test WHERE id = 100;
gkl3eglg

gkl3eglg3#

简单快捷:

SELECT ISNULL((SELECT 1 FROM test WHERE id = 100), 0) res

相关问题