在postgreSQL中,如果我的表为空,如何返回包含0的表,如果我的表有行,如何返回包含1的表?
我需要在SQL中执行此操作,而不是使用任何其他语言
答案 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;
编辑:重写了一下。以前使用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之外什么都不可能。为什么你不能使用任何其他语言?