mysql:0而不是空表

时间:2016-10-03 09:35:31

标签: mysql sql select where

我有一个SQL查询(简化示例):

select 
    ifnull(count(table.id), 0) as count 
from 
    table
where
    table.id > 10000

如果找不到表中的任何内容,结果显示一个空表,但我想输出0.

如何做到这一点?

我的决定(速度降低了5倍!!!)

DROP TEMPORARY TABLE IF EXISTS xxx;
CREATE TEMPORARY TABLE xxx ENGINE = MEMORY AS (SELECT SQL_CALC_FOUND_ROWS ...);

IF (FOUND_ROWS() = 0) THEN
    SELECT 0 AS count;
ELSE
    SELECT * FROM xxx;
END IF; 

这是工作!但是很慢:(

对不起,速度是恒定的:)我的错误

结果: 通过使用SQL_CALC_FOUND_ROWS和FOUND_ROWS解决了这个问题(感谢@Unknown用户) 但临时表......不确定这样一个决定的最优性

4 个答案:

答案 0 :(得分:0)

您可以使用此查询。这将为您提供匹配查询的总记录数。如果没有匹配结果,则会显示0

Reference

SELECT SQL_CALC_FOUND_ROWS ColumnName FROM TableName WHERE ColumnName IN ('');

SELECT FOUND_ROWS(); 

答案 1 :(得分:0)

这样:

select 
    COALESCE(count(table.id), 0) as count 
from 
    table
where
    table.id > 10000
group by table.id

答案 2 :(得分:0)

你可以使用case来检查表中没有值

 SELECT case when table.id is null then 0 
 else count(table.id) end as Count_NUM_ID FROM table
  where
 table.id > 10000

答案 3 :(得分:0)

只需删除group by即可。此外,ifnull()是不必要的:

select count(t.id) as `count`
from table t
where t.id > 10000;

您似乎想要满足条件的ID计数。您的版本将为每个id返回单独的计数。

如果您想为每个id单独计算,您可以执行以下操作:

select id, count(t.id) as `count`
from table t
where t.id > 10000
group by id 
union all
select null, 0
from table t
where not exists (select 1 from table t2 where t2.id > 10000);