【问题标题】:Return 1 if number exists in table and 0 otherwise如果表中存在数字,则返回 1,否则返回 0
【发布时间】:2015-01-18 15:39:10
【问题描述】:
如果表中已经存在某个数字,我想返回 1,否则返回 0。
我尝试了一些方法,但它不起作用:
select
case when 100 in (select distinct id from test) then '1'
else '0'
from test
我想要类似于 PostgreSQL 中已经存在的 exists 函数,但不是 true 和 false 我想要 1 或 0。
【问题讨论】:
标签:
sql
postgresql
boolean
exists
【解决方案1】:
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,并且由于LIMIT 1,Postgres 停止执行。
否则返回0。
见:
【解决方案2】:
如果您正在测试的字段是主键(或其他一些唯一约束),那么您可以简单地返回计数(始终为 0 或 1):
SELECT count(*) FROM test WHERE id = 100;
【解决方案3】:
简单快捷:
SELECT ISNULL((SELECT 1 FROM test WHERE id = 100), 0) res