【发布时间】:2012-09-06 10:27:47
【问题描述】:
我需要在 SQL Server 2008 中计算多个表中的行数。我这样做:
select count(*) from (select * from tbl1 union all select * from tbl2)
但它给了我一个错误,即 ) 附近的语法不正确。为什么?
附言。实际表数可以多于2个。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql count
我需要在 SQL Server 2008 中计算多个表中的行数。我这样做:
select count(*) from (select * from tbl1 union all select * from tbl2)
但它给了我一个错误,即 ) 附近的语法不正确。为什么?
附言。实际表数可以多于2个。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql count
如果您的表格中有不同数量的列,请尝试这种方式
SELECT count(*)
FROM (
SELECT NULL as columnName
FROM tbl1
UNION ALL
SELECT NULL
FROM tbl2
) T
【讨论】:
试试这个:
您必须为派生表命名
select count(*) from
(select * from tbl1 union all select * from tbl2)a
【讨论】:
我认为您必须在 FROM 子句中为 SELECT 起别名:
select count(*)
from
(
select * from tbl1
union all
select * from tbl2
) AS SUB
您还需要确保* 两个表tbl1 和tbl2 返回完全相同的列数,并且它们的类型必须匹配。
【讨论】:
我不喜欢在计数之前先进行并集。它为 SQL 优化器提供了选择做更多工作的机会。
AlexK 的(已删除)解决方案很好。你也可以这样做:
select (select count(*) from tbl1) + (select count(*) from tbl2) as cnt
【讨论】: