MySql的ifnull和计数错误?

By simon at 2018-02-28 • 0人收藏 • 66人看过

MySql版本:5.7.18-15-log, 我的同学问了一个问题:

他得到了一个结果:

计数:0钱8000 ,他问道为什么???没有记录,为什么有钱? 我试过并发现它就像一个bug,例如:

SELECT
  COUNT(1) Counts, 
  IFNULL((SELECT c.RealMoney FROM PayRecord c WHERE a.id=c.orderid), 0) money
FROM `Order` a
WHERE  a.id='bc7ba7ed-44f2-4686-b5ae-df65e8cc566f';
返回 计数:1钱:8622
  返回
  计数:0钱:8622
  看起来第一个sql会被缓存,
  第二个sql将使用此缓存...
  DDL如:
  
  我的问题是:为什么Count没有返回记录,但IFNULL具有值?

1 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

为什么你看到你观察到的是COUNT是一个逻辑 aggregate功能。当使用GROUP BY时,它会返回一个计数 横跨整个桌子。同样重要的是,它会一直返回一个 记录,即使我没有记录在实际的桌子上。在中使用COUNT select子句也意味着只有其他聚合函数或标量 常量可能会出现。你看到一笔钱的原因是它来自于 一个生成单个标量值的子查询。 虽然这样可能很难区分开来,但它肯定不是MySQL中的一个bug。

登录后方可回帖

Loading...