Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql:0而不是空表_Mysql_Sql_Select_Where - Fatal编程技术网

mysql:0而不是空表

mysql:0而不是空表,mysql,sql,select,where,Mysql,Sql,Select,Where,我有一个sql查询(简化示例): 如果在表中找不到任何内容,那么它将显示一个空表,但我希望输出0 如何做到这一点? 我的决定(速度下降了5倍!!!) 这是工作但缓慢:( 对不起,速度不变:)我错了 结果: 通过使用SQL_CALC_FOUND_ROWS和FOUND_ROWS解决了这个问题(感谢@Unknown User) 但是临时桌子。。。不确定这样一个决策的最佳性您可以使用此查询。这将为您提供具有匹配查询的记录总数。如果没有匹配结果,那么它将为您提供0 您可以使用此查询。这将为您提供具有匹配

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

如果在表中找不到任何内容,那么它将显示一个空表,但我希望输出0

如何做到这一点? 我的决定(速度下降了5倍!!!)

这是工作但缓慢:( 对不起,速度不变:)我错了

结果: 通过使用SQL_CALC_FOUND_ROWS和FOUND_ROWS解决了这个问题(感谢@Unknown User)
但是临时桌子。。。不确定这样一个决策的最佳性

您可以使用此查询。这将为您提供具有匹配查询的记录总数。如果没有匹配结果,那么它将为您提供
0


您可以使用此查询。这将为您提供具有匹配查询的记录总数。如果没有匹配结果,那么它将为您提供
0

这样:

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

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

当检查表中没有值时,可以使用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

当检查表中没有值时,可以使用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

只需按删除
分组即可。另外,
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);

只需按
删除
分组即可。另外,
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);


是否有另一个表,其中存在所有
表.id
?最好根据一些示例输入向我们显示您的预期输出如果您尝试
count(table.id)
而不是
count(1)
?另外,我认为你不需要
nullif
。养成接受答案的习惯(如果它对你有效的话)。这是SO中为数不多的表达感激之情的方式之一。你能进一步说明你所说的“没有发现”是什么意思吗?例如,您是否希望查找10000到10010之间的id,但希望查找是否缺少10009?为什么要按表对id进行分组?如果没有它,将返回
0
。您是否有另一个包含所有
表.id
的表?最好根据一些示例输入向我们显示您的预期输出如果您尝试
count(table.id)
而不是
count(1)
?另外,我认为你不需要
nullif
。养成接受答案的习惯(如果它对你有效的话)。这是SO中为数不多的表达感激之情的方式之一。你能进一步说明你所说的“没有发现”是什么意思吗?例如,您是否希望查找10000到10010之间的id,但希望查找是否缺少10009?为什么要按表对id进行分组?如果没有,它将返回
0
.1000111,COALESCE不起作用如果搜索未找到任何内容,行数等于0,COALESCE不起作用(空结果没有行,非空结果有1行)@Zhihar您可以创建一个过程或使用Prepare语句。临时表(在过程中)?stage1:选择临时表stage2:FOUND_ROWS stage3:与0比较`IF(FOUND_ROWS()=0),然后选择0 end IF;`@未知用户-这是我的决定(速度下降了5倍!!!)删除临时表,如果存在xxx;创建临时表xxx ENGINE=内存为(…);如果(FOUND_ROWS()=0),则选择0作为计数;否则从xxx中选择*;如果结束;这是工作!但是慢慢地:(1000111,COALESCE不起作用如果搜索未找到任何内容,行数等于0且COALESCE不起作用(空结果无行,非空结果有1行)@Zhihar您可以创建一个过程或使用Prepare语句。临时表(在过程中)?阶段1:选择临时表阶段2:找到临时表行阶段3:与0比较`IF(找到的行()=0),然后选择0结束IF;`@Unknown User-这是我的工作决定(速度下降了5倍!!!)如果存在临时表xxx;创建临时表xxx引擎=内存为(…);如果(找到的行()=0)然后选择0作为计数;否则选择*FROM xxx;结束IF;这是工作!但慢慢地:(Zaynul Abadin Tuhin不工作,因为…0行返回0.000秒/0.000sec@Zhihar在mysql工作台中运行此sql代码的地方,它会在操作输出中显示“17:07:39选择case when time为null然后选择0 else count(time)test1中的end as Count_NUM_ID返回0.000秒/0.000秒“Zaynul Abadin Tuhin不工作,因为…0行返回0.000秒/0.000sec@Zhihar当您在mysql工作台上运行此sql代码时,它会在操作输出中显示“17:07:39选择case when time为null然后选择0 else count(time)end as count_NUM_ID FROM test1 1行”返回0.000秒/0.000秒“对不起-‘分组依据’是我在示例中的错误(我检查了没有‘分组依据’的工作示例):@Zhihar…你不正确。如果没有分组依据,则无论是否选择了任何行,查询都将返回一行。对不起-‘分组依据’是我在示例中的错误(我检查了没有“分组依据”的工作示例):@Zhihar…您不正确。如果没有分组依据,无论是否选择了任何行,查询都将返回一行。