2

我需要在 SQL Server 2008 中计算多个表中的行数。我这样做:

select count(*) from (select * from tbl1 union all select * from tbl2)

但它给了我一个错误的语法错误靠近)。为什么?

PS。实际表数可以多于 2 个。

4

4 回答 4

3

如果您的表中有不同数量的列,请尝试这种方式

 SELECT count(*) 
 FROM (
      SELECT NULL as columnName 
      FROM tbl1 
          UNION ALL
      SELECT NULL 
      FROM tbl2
     ) T
于 2012-09-06T10:29:31.533 回答
3

尝试这个:

您必须为派生表命名

select count(*) from 
(select * from tbl1 union all select * from tbl2)a
于 2012-09-06T10:28:40.157 回答
1

我认为您必须SELECTFROM子句中为 the 别名:

select count(*) 
from 
(
   select * from tbl1 
   union all 
   select * from tbl2
) AS SUB

您还需要确保*在两个表中tbl1返回tbl2完全相同的列数,并且它们的类型必须匹配。

于 2012-09-06T10:29:11.190 回答
0

我不喜欢在计数之前先做工会。它为 SQL 优化器提供了选择做更多工作的机会。

AlexK 的(已删除)解决方案很好。你也可以这样做:

select (select count(*) from tbl1) + (select count(*) from tbl2) as cnt
于 2012-09-06T15:17:47.240 回答