表名 - '标签'
架构 - (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作为输出?
感谢。
答案 0 :(得分:2)
这不等于NOT EXISTS
。 SELECT 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;
但我认为这实际上是更复杂的一部分。