如果表空,如何返回0,否则返回1

问题描述 投票:8回答:7

在postgreSQL中,如果我的表为空,如何返回包含0的表,如果我的表有行,如何返回包含1的表?

我需要在SQL中执行它,而不是使用任何其他语言

sql postgresql
7个回答
14
投票

使用:

SELECT CASE 
         WHEN EXISTS (SELECT * FROM foo LIMIT 1) THEN 1
         ELSE 0 
       END

编辑:添加LIMIT 1以加快查询速度。


13
投票

可能是一个黑客,但它的工作原理。

SELECT count(*) FROM (SELECT 1 FROM table LIMIT 1) AS t;
  • 在子查询中选择的1可以是任何东西,它只是一个占位符。
  • 无论表大小如何,LIMIT 1都应该使子查询非常快。

编辑:重写了一下。以前使用LIMIT是错误的(对我说的大表没有帮助)。


2
投票

尝试:

select sign(count(*)) from mytable

0
投票

也许这就是你要找的?

select min( c ) from (
select count(*) c
from mytab
union
select 1
from mytab
having count(*) > 1 )

0
投票

SELECT,COUNT和LIMIT应该这样做。

-- see below SELECT COUNT(*) FROM X LIMIT 1

编辑:这在Postgres中不起作用(至少8.x)。请参阅评论和这里:http://postgresql.1045698.n5.nabble.com/window-function-count-and-limit-td3233588.html

快乐的SQL'ing。


0
投票

您可以将此请求放在存储过程中,并将表名作为参数:

CREATE OR REPLACE FUNCTION isEmpty(tableName text, OUT zeroIfEmpty integer) AS
$func$
BEGIN
EXECUTE format('SELECT COALESCE ((SELECT 1 FROM %s LIMIT 1),0)', tableName)
INTO zeroIfEmpty;
END
$func$ LANGUAGE plpgsql;

然后像这样运行这个函数:

SELECT * FROM isEmpty('my_table_name');

因此,您可以使用任何表格的名称来调用它


-5
投票

我认为除了SQL之外什么都不可能。为什么你不能使用任何其他语言?

© www.soinside.com 2019 - 2024. All rights reserved.