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

时间:2010-11-09 21:18:29

标签: sql postgresql

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

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

7 个答案:

答案 0 :(得分:14)

使用:

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

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

答案 1 :(得分:13)

可能是一个黑客,但它确实有效。

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

编辑:重写了一下。以前使用LIMIT是错误的(对于大型桌子没有帮助)。

答案 2 :(得分:2)

尝试:

select sign(count(*)) from mytable

答案 3 :(得分:0)

也许这就是你要找的东西?

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

答案 4 :(得分: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。

答案 5 :(得分: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');

因此,您可以使用任何表名

来调用它

答案 6 :(得分:-5)

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