快速检查我使用了查询
select COUNT(*) LargeTable
并且惊讶地看到了
LargeTable
-----------
1
几秒钟后,我意识到自己的错误,做到了
select COUNT(*) from LargeTable
并获得预期结果
(No column name)
-----------
1.000.000+
但现在我不明白为什么COUNT(*)
返回1
select COUNT(*)
或declare @x int = COUNT(*); select @x
,就会发生这种情况
另一个案例
declare @EmptyTable table ( Value int )
select COUNT(*) from @EmptyTable
返回
(No column name)
-----------
0
我没有在SQL标准中找到解释(http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt,此处提供了在线资源https://stackoverflow.com/a/8949764/1506454)
为什么COUNT(*)
会返回1?
答案 0 :(得分:12)
在SQL Server中,没有SELECT
子句的FROM
就像对单行表一样运行。
这不是标准SQL。其他RDBMS提供了一个带有单行的实用程序DUAL
。
因此,这将与
有效对待SELECT COUNT(*) AS LargeTable
FROM DUAL
相关的Connect Item讨论
SELECT 'test'
WHERE EXISTS (SELECT *)
是https://connect.microsoft.com/SQLServer/feedback/details/671475/select-test-where-exists-select
答案 1 :(得分:0)
因为没有 FROM 子句,DBMS无法知道[LargeTable]是一个表。你猜它是一个 COLUMN NAME 别名
你可以尝试看看
select count(*) 'eklmnjdklfgm'
select count(*) eklmnjdklfgm
select count(*) [eklmnjdklfgm]
select count(*)
前3个示例将 eklmnjdklfgm 作为列名返回
答案 2 :(得分:-1)
Count(*)返回1,因为你的句子不是SQL。
1)在第一句话中,您将一个表空了一个表,只有一行,因为您没有放入要访问的表。
2)在第二种情况下:
declare @EmptyTable table ( Value int )
select COUNT(*) from @EmptyTable
返回
(No column name)
-----------
0
你把变量放了,但不确定哪个表实现了他。为此,请计数并外出0。