这个SQL查询如何工作?

时间:2015-12-07 05:56:34

标签: mysql sql

表名 - '标签'

架构 - (a int,b int)

|  a  |  b  |    
|  1  |  5  |    
|  2  |  10 |    
|  3  |  15 |

select count(*) from tab where exists 

(select count(*) from tab where b=2);

它输出3。 here 我怀疑的是,我们在列' b'(子查询)中没有值= 2,所以它返回0,我认为这相当于' not-exists',为什么我得到3作为输出?

感谢。

1 个答案:

答案 0 :(得分:2)

这不等于NOT EXISTSSELECT COUNT(*)总是返回一些东西:一行,其中包含查询其余部分给出的值的计数。如果查询的其余部分将返回0行(无结果),则SELECT COUNT(*)的结果为零,这不是NULL并且不是空结果集。具有值0的单个列的单行仍然存在,因此EXISTS(...)的结果将为真。

我认为你想要的是:

select count(*) from tab where exists
(select 1 from tab where b=2);

在这种情况下,如果tab中没有b为2的行,则子查询中不会返回任何结果,EXISTS将为false。

当然,您可以轻松地将此查询重写为:

SELECT COUNT(*)
  FROM tab
 WHERE b <> 2;

但我认为这实际上是更复杂的一部分。