【发布时间】:2016-10-03 09:35:30
【问题描述】:
我有一个 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 User) 但是临时表...不确定这样的决定的最优性
【问题讨论】:
-
您是否还有另一个表,其中所有
table.ids都存在?更好地根据一些示例输入向我们展示您的预期输出 -
如果您尝试使用
count(1)而不是count(table.id)会怎样?另外,我认为您不需要nullif。 -
养成接受答案的习惯(如果它适合你)。这是在 SO 中表达感谢的少数几种方式之一。
-
您能否详细说明未找到的含义?例如,您是否希望找到介于 10000 和 10010 之间的 id,但又想查找是否缺少 10009?
-
你为什么
group by table.id?没有它会返回0。