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

Spa*_*awn 8 sql postgresql

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

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

Gen*_*ari 14

使用:

SELECT CASE 
         WHEN EXISTS (SELECT * FROM foo LIMIT 1) THEN 1
         ELSE 0 
       END
Run Code Online (Sandbox Code Playgroud)

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

  • 这太错了!此查询读取整个表以确定它是否为空.对于大桌子,它需要很长时间! (4认同)
  • @Tometzky这不会花费很长时间.从[postgresql文档](http://www.postgresql.org/docs/8.1/static/functions-subquery.html):*"子查询通常只会被执行到足以确定是否返回至少一行,并非一直到完成."*换句话说,`LIMIT 1`已经内置.EXISTS的任何实现都应该以相同的方式运行,因为获取更多数据从来没有任何意义. (4认同)

plu*_*dra 13

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

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

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


小智 -10

我认为只使用 SQL 是不可能的。为什么不能使用其他语言?

  • 作为评论会更好 (2认同)